Ошибки, баги, вопросы - страница 921

 
sergeev:

- Поддерживает ли брокер установку ордера с указанием времени?

Для этого нажмите F9 и проверьте можно ли задать время.


Здесь все работает,  т.е. все отложенные ордера выполняются без ошибок.
 
Здравствуйте, у меня такой вопрос - я купил эксперта установил на компьютер, потом заказал VPS сервер и установил этого же эксперта. В итоге отказался арендованного  сервера так как у брокера услуга бесплатно но эксперт третий раз(на три  оборудование) нельзя устанавливать. Что мне делать? Можно отказаться от одного сервера в пользу другого? Куда обращаться? Спасибо!
 

Два вопроса по работе с файлами.

1. Есть текстовый файл в котором хранятся строки на различных языках (включая такие как японский, арабский и т.д.). Соответственно, кодировка файла UTF8. Данные в файле записаны в виде "Alias=Translation", где алиас всегда на английском, а перевод - любой другой язык. Был уверен что и при считывании нужно использовать FILE_UNICODE. Но, если открыть файл вот так:

int fileHandle = FileOpen(fileName, FILE_READ|FILE_TXT|FILE_UNICODE, 0, CP_UTF8);

при считывании строк получаем бессмысленный набор иеорглифов. Если же открыть вот так:

int fileHandle = FileOpen(fileName, FILE_READ|FILE_TXT|FILE_ANSI, 0, CP_UTF8);

то считывает и впоследствии нормально выводит (проверял английский, русский, украинский, японский, арабский).

Ну и вопрос: почему приходится использовать флаг FILE_ANSI ? Ведь ANSI же для однобайтовых символов, да и UTF8 то кодировка символов юникода..


2. Есть класс в котором есть такой метод:

string CTranslator::getTranslate(string str) {
//---
   int fileHandle = FileOpen(filename, FILE_READ|FILE_TXT|FILE_ANSI, 0, CP_UTF8);
   
   if ( fileHandle == INVALID_HANDLE ) {
      return(str);
   }
//---
   string temp, alias, traslation;
   int delimiterPos;
      
   for ( ; !FileIsEnding(fileHandle); ) {
      temp = FileReadString(fileHandle);
      delimiterPos = StringFind(temp, "=");
      alias = StringSubstr(temp, 0, delimiterPos);
      
      if ( StringCompare(str, alias, false) == 0 ) {
         traslation = StringSubstr(temp, delimiterPos+1);
          
         return(traslation);
      }   
   }
   FileClose(fileHandle);
//---
   return(str);
}

Имя файла является свойством и ему присваивается значение при инициализации объекта. То бишь при вызове метода, открываем файл, читаем построчно, и как только находим подходящую строку - возвращаем её подстроку. Если файл не открывается или нет подходящей строки - возвращаем строку, которую подавали на вход.  

Если вызываем метод один раз - всё работает. Но если вызывать несколько раз подряд -  срабатывает только первый раз, а на второй и последующие при попытке открыть файл - INVALID_HANDLE (проверял принтом). В чём может быть проблема?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Rone:

2. Есть класс в котором есть такой метод:

Имя файла является свойством и ему присваивается значение при инициализации объекта. То бишь при вызове метода, открываем файл, читаем построчно, и как только находим подходящую строку - возвращаем её подстроку. Если файл не открывается или нет подходящей строки - возвращаем строку, которую подавали на вход.  

Если вызываем метод один раз - всё работает. Но если вызывать несколько раз подряд -  срабатывает только первый раз, а на второй и последующие при попытке открыть файл - INVALID_HANDLE (проверял принтом). В чём может быть проблема?

Возможно, причина в этом:

      if ( StringCompare(str, alias, false) == 0 ) {
         traslation = StringSubstr(temp, delimiterPos+1);
          
         return(traslation);
      }   
 
Rone:

...

2. Есть класс в котором есть такой метод:

Имя файла является свойством и ему присваивается значение при инициализации объекта. То бишь при вызове метода, открываем файл, читаем построчно, и как только находим подходящую строку - возвращаем её подстроку. Если файл не открывается или нет подходящей строки - возвращаем строку, которую подавали на вход.  

Если вызываем метод один раз - всё работает. Но если вызывать несколько раз подряд -  срабатывает только первый раз, а на второй и последующие при попытке открыть файл - INVALID_HANDLE (проверял принтом). В чём может быть проблема?

Возможно потому, что если "возвращаем строку, которую подавали на вход" файл не закрываем? 
 

может быть там оно и работает

но есть ли возможность задания даты у вашего ДЦ?

 
Contender:

Возможно, причина в этом:

 ...

tol64

...


Спасибо за оперативные ответы!

Извините, проглядел, вышел покурить и дошло.

Вот оно:

      if ( StringCompare(str, alias, false) == 0 ) {
         traslation = StringSubstr(temp, delimiterPos+1);
         FileClose(fileHandle);

         return(traslation);
      }

Теперь работает. Но первый вопрос в силе.

 
sergeev:

может быть там оно и работает

но есть ли возможность задания даты у вашего ДЦ?

От своего брокера уже неделю не могу ничего внятного услышать ... рррррр....

 
Rone:


Спасибо за оперативные ответы!

Извините, проглядел, вышел покурить и дошло.

Вот оно:

Теперь работает. Но первый вопрос в силе.

По первому вопросу.

Если файл открывается как юникодный, то никакие преобразования не производятся (то есть, Ваше CP_UTF8 просто игнорируется), данные читаются "как есть"

Кодовая страница действует при преобразовании во внутренний юникодный текст (данные типа string) при чтении из текстового файла, открытого в режиме ANSI.

 
Nikos52:

От своего брокера уже неделю не могу ничего внятного услышать ... рррррр....


а F9 на терминале вашего ДЦ поломался?
Причина обращения: