Файловые операции

 

Собираюсь читать отчеты СОТ и создавать файлы на их основе(пока на MQL4)

Не совсем понятен алгоритм чтения файла. Нужно помещать чтение в цикл, то есть каждый раз чтение начинается с новой строки?

Или зацикливать не обязательно?

void OnStart()
  {
   int Handle;
   int shet;
   string File_Name="FinFutYY.csv",Str_DtTm;
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,",");// открываем файл
   if(Handle<0) // Failure when opening a file
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_Name);
      else
         Alert("Error when opening a file ",File_Name);
      PlaySound("Bzrrr.wav");
      return;
     }
   while(FileIsEnding(Handle)==false)
   {
   Str_DtTm =FileReadString(Handle);// строка даты
   if(FileIsEnding(Handle)==true){ Print("Конец отсчета=");break;}  
   }   
 
  }

Прикрепленному файлу сделал расширение txt, csv не прикрепляется. 

Файлы:
FinFutYY.txt  726 kb
 
forexman77:

Собираюсь читать отчеты СОТ и создавать файлы на их основе(пока на MQL4)

Не совсем понятен алгоритм чтения файла. Нужно помещать чтение в цикл, то есть каждый раз чтение начинается с новой строки?

Или зацикливать не обязательно?

Прикрепленному файлу сделал расширение txt, csv не прикрепляется. 

оно тебе надо? )) Данные выходят раз в неделю, и те не актуальные!!! плюс ко всему они практически не меняются со временем - посмотрел и забыл
 
Daniil Stolnikov:
оно тебе надо? )) Данные выходят раз в неделю, и те не актуальные!!! плюс ко всему они практически не меняются со временем - посмотрел и забыл
Надо посмотреть кое-что. Почему не актуальные?
 
forexman77:
Надо посмотреть кое-что. Почему не актуальные?
дату посмотри в отчете ))

Они выходят пятничные - в следующий вторник ))
 
Daniil Stolnikov:
дату посмотри в отчете ))

Они выходят пятничные - в следующий вторник ))
Ну, это я видел.
 

csv читается кусочками: либо до разделителя (здесь запятая), либо до конца строки.

Разделитель или конец строки в считанную строку не попадают.

Окончание строки можно понять по FileIsLineEnding(...).

Т.е. наверно нужен еще один встроенный цикл для разбора строк.


зы В файле есть поля в кавычках, а внутри - запятые. Эти запятые (наверно) будут восприниматься как разделители, т.е. их нужно будет правильно обрабатывать: искать парную кавычку, и объединять строки в одно поле.



 

 
Vladimir Kazakov:

csv читается кусочками: либо до разделителя (здесь запятая), либо до конца строки.

Разделитель или конец строки в считанную строку не попадают.

Окончание строки можно понять по FileIsLineEnding(...).

Т.е. наверно нужен еще один встроенный цикл для разбора строк.

 

Понятно. Буду дальше думать. Они в конце есть вроде только, эти данные мне не нужны.

Мне нужен открытый интерес, шорт, лонг.

Нужно считать эти данные и перейти на другую строку. Только пока не разобрался, как сделать)

 

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

 

Вот на С++ когда-то делал:

Файлы:
COT_G3.zip  2 kb
 
Vladimir Kazakov:

Вот на С++ когда-то делал:

Спасибо. Только у меня компилятора С++ нет. Но, в качестве примера смотрю в мкл.
 

Сделал файл еще меньше. Данные в кавычках вообще убрал. Скрипт переделал:

void OnStart()
  {
   int Handle;
   int shet;
   datetime Dat_DtTm;
   string File_Name="FinFutYY.csv",Text;
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,",");// открываем файл
   if(Handle<0) // Failure when opening a file
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_Name);
      else
         Alert("Error when opening a file ",File_Name);
      PlaySound("Bzrrr.wav");
      return;
     }
   while(FileIsEnding(Handle)==false)
   {
   Dat_DtTm =FileReadDatetime(Handle);// строка даты
   Text     =FileReadString(Handle);// строка значения
   Print("Dat_DtTm=",Dat_DtTm,"Text=",Text);
   if(FileIsEnding(Handle)==true){ Print("Конец отсчета=");}  
   if(FileIsLineEnding(Handle)){ Print("Конец строки=");} 
   }
    
  }

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

Файлы:
FinFutYY.txt  19 kb