Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подними скорость в сети MQL5 Cloud Network. Установи Strategy Tester Agent!
karamaza
13
karamaza 2014.10.26 12:00 

Уважаемые, понимающие люди. Подскажите как подправить строки кода. Во многих индикаторах терминала MT4 встречается один и тот же блок кода, на котором в метаэдиторе выскакивают ошибки и индикатор соответственно не работает (Несколько лет назад все работало, что поменялось непонятно) .

Строки следующие:

//

string stringUpperCase(string str)
{
   string   s = str;

   for (int length=StringLen(str)-1; length>=0; length--)
   {
      int char = StringGetChar(s, length);
         if((char > 96 && char < 123) || (char > 223 && char < 256))
                     s = StringSetChar(s, length, char - 32);
         else if(char > -33 && char < 0)
                     s = StringSetChar(s, length, char + 224);
   }
   return(s);
}
// 

Начиная с "int char" начинаются ошибки, ругается на char и т.д. 

Заранее всем благодарен за участие.

Vladimir Karputov
Модератор
41773
Vladimir Karputov 2014.10.26 12:09  

Правильно ругается - справку в MetaEditor'e просмотрите:

StringGetChar

Возвращает значение символа, расположенного в указанной позиции строки.

int  StringGetChar(
   string  string_value,     // строка
   int     pos               // позиция символа в строке
   );
Тип возвращаемый строковой функцией StringGetChar() - int, а не char
karamaza
13
karamaza 2014.10.26 12:21  
barabashkakvn:

Правильно ругается - справку в терминале просмотрите:

По справке все эти команды я посмотрел, но т.к. в программировании не силен, разобраться что сделать сам не смог, поэтому и спросил что нужно исправить чтобы работало. Индикаторов с таким блоком кода много и повторюсь, что раньше они работали, а сейчас нет.
Vladimir Karputov
Модератор
41773
Vladimir Karputov 2014.10.26 12:51  
string stringUpperCase(string str)
  {
   string   s=str;
   int char_code=0;
   for(int length=StringLen(str)-1; length>=0; length--)
     {
      char_code=StringGetChar(s,length);
      if((char_code>96 && char_code<123) || (char_code>223 && char_code<256))
         s=StringSetChar(s,length,ushort(char_code-32));
      else if(char_code>-33 && char_code<0)
         s=StringSetChar(s,length,ushort(char_code-32));
     }
   return(s);
  }
Теперь компилятор не ругается.
karamaza
13
karamaza 2014.10.26 13:07  
barabashkakvn:
Теперь компилятор не ругается.
Спасибо попробую. Была мысль, что просто нельзя "char" использовать в качестве имени переменной, и исправить добавлением буквы или наоборот отниманием одной двух букв от "char". После подобного исправления метаэдитор хоть и перестает выдавать ошибки, но индикаторы все равно не работают. Буду пробовать ваш вариант.
Alexey Kozitsyn
6157
Alexey Kozitsyn 2014.10.27 17:55  
karamaza:
Спасибо попробую. Была мысль, что просто нельзя "char" использовать в качестве имени переменной, и исправить добавлением буквы или наоборот отниманием одной двух букв от "char". После подобного исправления метаэдитор хоть и перестает выдавать ошибки, но индикаторы все равно не работают. Буду пробовать ваш вариант.
Мысль правильная. Подтверждается справкой.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий