Работа с файлами. Разделение текстового файла.

 

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

Я пытаюсь прочитать текстовой файл в массив, хочу каждую цену и дату записать в свои массив, но не понимаю как здесь быть с разделителями. Текст в файле можно посмотреть в прикрепленном файле.

P.S.

Странно что в прикрепленном файле выглядит упорядоченным. Прикрепил картинку как он на компе выглядит.


Файлы:
 
Nauris Zukas:

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

Я пытаюсь прочитать текстовой файл в массив, хочу каждую цену и дату записать в свои массив, но не понимаю как здесь быть с разделителями. Текст в файле можно посмотреть в прикрепленном файле.

P.S.

Странно что в прикрепленном файле выглядит упорядоченным. Прикрепил картинку как он на компе выглядит.



Можно попробовать поставить в качестве разделителя пробел. Правда, сам никогда так не пробовал делать. Если не получится, то тогда один путь - делать свой парсер этого формата. Структура прослеживается.

P. S. Между RateAsk и 2017 точно нет перевода строки? Иначе даже с пробелом ничего не выйдет.

 
Ihor Herasko:

P. S. Между RateAsk и 2017 точно нет перевода строки? Иначе даже с пробелом ничего не выйдет.

Спасибо, да есть, и FileReadString всё правильно распределяет, только по немножко начал разбиратся с файлами.

 
Nauris Zukas:

Я пытаюсь прочитать текстовой файл в массив, хочу каждую цену и дату записать в свои массив, но не понимаю как здесь быть с разделителями. Текст в файле можно посмотреть в прикрепленном файле.

Обычный CSV, сохраненный в линуксовом текстовом формате - перевод строки одним символом LF (0x0A) - и разделитель колонок табуляция (0x09). Все подходящие функции MT API должны работать без допиливаний.

 
Stanislav Korotky:

Обычный CSV, сохраненный в линуксовом текстовом формате - перевод строки одним символом LF (0x0A) - и разделитель колонок табуляция (0x09). Все подходящие функции MT API должны работать без допиливаний.

Спасибо!

 
Stanislav Korotky:

Обычный CSV, сохраненный в линуксовом текстовом формате - перевод строки одним символом LF (0x0A) - и разделитель колонок табуляция (0x09). Все подходящие функции MT API должны работать без допиливаний.

Я понемножку продвигаюсь и уже научился находить "разделитель колонок табуляция (0x09)".

int position=StringFind(str,"\x09",0);            
int position1=StringFind(str,"\x09",position+1);


Но меня заинтересовал вопрос, как глядя на текст можно било найти и узнать эти кода LF (0x0A)  и (0x09) которых я сейчас использую?

 
Nauris Zukas:
Вот хороший материал по теме, с примерами : https://www.mql5.com/ru/articles/2720#z8
Основы программирования на MQL5: Файлы
Основы программирования на MQL5: Файлы
  • 2016.09.28
  • Dmitry Fedoseev
  • www.mql5.com
Функции для работы с файлами есть почти во всех языках программирования, и MQL5 в этом смысле — не исключение. Хотя при программировании советников и индикаторов на MQL5 работать с использованием файлов приходится не всегда, (а скорее даже — очень редко), но тем не менее, каждый экспертописатель рано или поздно с этим сталкивается. Диапазон...
 
Nauris Zukas:

Я понемножку продвигаюсь и уже научился находить "разделитель колонок табуляция (0x09)".


Но меня заинтересовал вопрос, как глядя на текст можно било найти и узнать эти кода LF (0x0A)  и (0x09) которых я сейчас использую?


в hex-редакторе откройте файл

 
Sergey Kolemanov:
Вот хороший материал по теме, с примерами : https://www.mql5.com/ru/articles/2720#z8

Я смотрел этот материал но там не написано про коды LF (0x0A)  и (0x09).

 
Taras Slobodyanik:

в hex-редакторе откройте файл

Спасибо, посмотрю.

 
Nauris Zukas:

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

Я пытаюсь прочитать текстовой файл в массив, хочу каждую цену и дату записать в свои массив, но не понимаю как здесь быть с разделителями. Текст в файле можно посмотреть в прикрепленном файле.

P.S.

Странно что в прикрепленном файле выглядит упорядоченным. Прикрепил картинку как он на компе выглядит.


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



Затем сохранить его как .csv и потом его читать.

/********************Script program start function*******************/
void OnStart()
{
 int i = 0;
 datetime dateTime[];
 double bid[], ask[];
 int handle = FileOpen("Test_OFails__1.csv", FILE_READ|FILE_CSV|FILE_ANSI, ";");
  while(!FileIsEnding(handle))
   {
    ArrayResize(dateTime, ArraySize(dateTime)+1);
    ArrayResize(bid, ArraySize(bid)+1);
    ArrayResize(ask, ArraySize(ask)+1);
    dateTime[i] = (datetime)FileReadString(handle);
    bid[i] = (double)FileReadString(handle);
    ask[i] = (double)FileReadString(handle);
    i++;
   }
 FileClose(handle);
}/*******************************************************************/
Причина обращения: