Скачать MetaTrader 5

Простое чтение файла

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Есть вопросы к автору программы - задай их в разделе Обсуждение
Ihor Herasko
9064
Ihor Herasko 2011.03.14 17:40 

Создал обычный текстовый файл demofile.txt в папке MQL5\files. Содержимое файла:

123456
7890
abcdefg
hijklmnop
Пытаюсь прочесть его построчно:
input string   FileName="demofile.txt";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   int handle = FileOpen(FileName, FILE_READ|FILE_TXT);
   if (handle == INVALID_HANDLE)
   {
      Alert("Файл ", FileName, " не найден!");
      return;
   }
   while (!FileIsEnding(handle))
   {
      string S = FileReadString(handle);
      Alert(S);
   }
   FileClose(handle);   
}

Итог работы скрипта:

2011.03.14 16:32:41     ReadIniFile (EURUSD,H1) ㈱㐳㘵਍㠷〹਍扡摣晥൧栊橩汫湭灯

Никаких ошибок не получаю. При удалении файла, как и положено, получаю ошибку:

2011.03.14 16:39:04     ReadIniFile (EURUSD,H1) Файл demofile.txt не найден!
Кто-нибудь сталкивался с такой проблемой? Или я в упор не замечаю свою ошибку?
Документация по MQL5: Файловые операции / FileDelete
Документация по MQL5: Файловые операции / FileDelete
  • www.mql5.com
Файловые операции / FileDelete - Документация по MQL5
Aleksandr Chugunov
4818
Aleksandr Chugunov 2011.03.14 17:44  
Scriptong:

Создал обычный текстовый файл demofile.txt в папке MQL5\files. Содержимое файла:

Пытаюсь прочесть его построчно:

Итог работы скрипта:

Никаких ошибок не получаю. При удалении файла, как и положено, получаю ошибку:

Кто-нибудь сталкивался с такой проблемой? Или я в упор не замечаю свою ошибку?

Вы забыли про кодировку

   int handle = FileOpen(FileName, FILE_READ|FILE_TXT|FILE_ANSI);
Ihor Herasko
9064
Ihor Herasko 2011.03.14 17:52  
AlexSTAL:

Вы забыли про кодировку

Спасибо. Правда, об указании кодировки я не забыл, а просто не знал, что нужно явно ее указывать.

В примере из справки:

filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
кодировка не задана явно. Хотя CSV, по сути, тот же txt-файл, только с разделителями.

 

Rashid Umarov
Админ
11836
Rashid Umarov 2011.03.14 17:59  
Scriptong:

Спасибо. Правда, об указании кодировки я не забыл, а просто не знал, что нужно явно ее указывать.

В примере из справки:

кодировка не задана явно. Хотя CSV, по сути, тот же txt-файл, только с разделителями.

 

В разделе указано Флаги открытия файлов:

Флаги, определяющие тип кодировки, также имеют приоритет. Флаг FILE_UNICODE имеет более старший приоритет,чем флаг  FILE_ANSI. Поэтому при указании комбинации FILE_UNICODE|FILE_ANSI будет использоваться флаг FILE_UNICODE.

Если не указано ни  FILE_UNICODE, ни FILE_ANSI, то подразумевается FILE_UNICODE. Если не указано ни FILE_CSV, ни FILE_BIN, ни FILE_TXT, то подразумевается FILE_CSV.

Если файл открыт на чтение как текстовый (FILE_TXT или FILE_CSV), и при этом в начале файла будет обнаружен специальный двухбайтовый признак 0xff,0xfe, то флаг кодировки будет FILE_UNICODE, даже если указан флаг FILE_ANSI.


Ihor Herasko
9064
Ihor Herasko 2011.03.14 18:11  
Rosh:

В разделе указано Флаги открытия файлов:


Спасибо. Теперь понятно.
Alfff
61
Alfff 2012.01.25 01:30  

Здравствуйте.

Я также столкнулся с проблемой открытия файла.

Не могу понять, если имя файла "Results" в проводнике не отображается .txt, что я должен указывать эксперту? С txt или без?

И еще, если я не указываю полный путь файла, а просто имя, где по умолчанию он будет искаться программой?

И есть ли разница если я использую тестер или собственно применяю эксперт к рынку? 

Спасибо. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий