//+------------------------------------------------------------------+ 
//|                                        Demo_FileIsLineEnding.mq4 | 
//|                        Copyright 2014, MetaQuotes Software Corp. | 
//|                                              https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "Copyright 2014, MetaQuotes Software Corp." 
#property link      "https://www.mql5.com" 
#property version   "1.00" 
#property strict 
//--- параметры для чтения данных 
input string InpFileName="RSI.csv";   // имя файла 
input string InpDirectoryName="Data"; // имя директории 
//--- переменные перекупленности 
int      ovb_size=0; 
datetime ovb_time[]; 
//--- переменные перепроданности 
int      ovs_size=0; 
datetime ovs_time[]; 
//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart() 
  { 
//--- откроем файл 
   ResetLastError(); 
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV|FILE_ANSI,"\t"); 
   if(file_handle!=INVALID_HANDLE) 
     { 
      PrintFormat("Файл %s открыт для чтения",InpFileName); 
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
      double value; 
      //--- читаем данные из файла 
      while(!FileIsEnding(file_handle)) 
        { 
         //--- читаем первое значение в строке 
         value=FileReadNumber(file_handle); 
         //--- читаем в разные массивы в зависимости от результата функции 
         if(value>=70) 
            ReadData(file_handle,ovb_time,ovb_size); 
         else 
            ReadData(file_handle,ovs_time,ovs_size); 
        } 
      //--- закроем файл 
      FileClose(file_handle); 
      PrintFormat("Данные прочитаны, файл %s закрыт",InpFileName); 
      //--- выводим содержимое прочитанных массивов времени 
      PrintFormat("Overbought=%d",ovb_size); 
      for(int i=0; i<ovb_size; i++) Print(i," time=",TimeToString(ovb_time[i])); 
      PrintFormat("Oversold=%d",ovs_size); 
      for(int i=0; i<ovs_size; i++) Print(i," time=",TimeToString(ovs_time[i])); 
     } 
   else 
     { 
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError()); 
      return; 
     } 
//--- 
  } 
//+------------------------------------------------------------------+ 
//| Чтение данных строки файла                                       | 
//+------------------------------------------------------------------+ 
void ReadData(const int file_handle,datetime &arr[],int &size) 
  { 
   bool flag=false; 
//--- читаем пока не дойдем до конца строки или файла 
   string str=""; 
   while(!FileIsLineEnding(file_handle) && !FileIsEnding(file_handle)) 
     { 
      //--- сдвинем каретку, прочитав число 
      if(flag) 
         FileReadNumber(file_handle); 
      size++; 
      //--- при необходимости увеличим размер массива 
      if(size>ArraySize(arr)) ArrayResize(arr,size,100); 
      //--- запоминаем текущую дату 
      arr[size-1]=FileReadDatetime(file_handle); 
      //--- добавляем в строку 
      str+=" "+TimeToString(arr[size-1]); 
      //--- проскочили первую итерацию 
      flag=true; 
     } 
   Print(str); 
  }  |