Прилагаю к посту простой текстовый файл, такой, какой есть. Вроде, обычный текстовый файл. Но не могу из него прочитать строчки через FileReadString:
С другими файлами, вроде, работает, с этим - нет.
так у меня читает текстовый файл !
pHandle = FileOpen(pFileName,FILE_READ); if(pHandle > -1) { while(!FileIsEnding(pHandle)) { pStr=""; pStrSub=""; pi=0; pStrFile = FileReadString(pHandle);также проверь имя файла, месторасположение, что хендл кажет и какие ошибки в журнале!
https://docs.mql4.com/ru/files/FileReadString: "Для текстовых файлов строка будет прочитана до разделителя."
https://docs.mql4.com/ru/basis/types/string: "Длина строковой константы - от 0 до 255 символов."
То есть, как я понимаю то, что написано в доке сейчас, в строку должен был попытаться загрузиться весь файл, который больше 255 символов, нет?
Вот полный код скрипта:
void start() { int handle; string Str; handle = FileOpen("test.txt", FILE_CSV|FILE_READ); Str = FileReadString(handle); // FileSeek(handle, 0, SEEK_CUR); Str = FileReadString(handle); Print(Str); FileClose(handle); return; }
С чтением первой строчки нет проблем. Но вторую (третью тоже) прочитать не удается (пустая строка).
Интересный результат получается, если расскомментировать в коде строчку, которая по своему смыслу ничего менять не должна, но меняет.
Посмотрел побайтово проблемный файл:
в нем в конце строки стоят два байта в такой последовательности: 0x0A (перевод каретки) и 0x0D (перевод строки).
У файлов, записанных через FileWriteString в конце строк последовательность байт немного иная: 0x0D и 0x0A - с ними скрипт работает без проблем.
Текстовые редакторы видят файлы обоих вариантов без проблем, однако, для FileReadString это не так. Возоможно, у кого-то есть мысли, как обойти ограничение средствами MQL4.
Похоже, проблема глубже, чем с первого взгляда показалась. Взял другой файл, с той же последовательностью (0x0A и 0x0D) в конце каждой строки, как и у предыдущего файла.
Код выше с раскомментированной строчкой на нем работает! Тогда написал код немного иной:
void start() { int handle; string Str; handle = FileOpen("testNew.txt", FILE_READ); Str = FileReadString(handle); while (StringLen(Str) > 10) { FileSeek(handle, 0, SEEK_CUR); // без этой строки по какой-то причине не работает Str = FileReadString(handle); Print(Str); } FileClose(handle); return; }Считываются строчки. Но только до 9-й с конца, т.е. считывает первые 847 строк, дальше никак! Проверил файл побайтово - все нормально.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прилагаю к посту простой текстовый файл, такой, какой есть. Вроде, обычный текстовый файл. Но не могу из него прочитать строчки через FileReadString:
С другими файлами, вроде, работает, с этим - нет.