Файловые операции - страница 3

 
Daniil Stolnikov:
еще не победил? день уже прошел ))

скомпилируйте человеку кто нить парсера ))
Не пока только читать научился. Завтра попробую записывать и индикатор потом сделаю.
 

Файл "OpenInteresGBP.csv", создал и поместил в папку "files"

Чтобы выложить файлы здесь сделал им расширение txt, csv не подкрепляется на форуме, в папке терминала они расширения csv.

Вызываю скрипт, ошибок не появляется.  Открываю файл "OpenInteresGBP.csv" в нем нет никаких записей.

void OnStart()
  {
   int Handle,HandleWrite,Qnt,chislo;
   datetime Dat_DtTm;
   string File_Name="FinFutYY.csv";
   string File_NameW="OpenInteresGBP.csv";
   string Text, Skip;
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,",");// открываем файл
   HandleWrite=FileOpen(File_NameW,FILE_READ|FILE_WRITE|FILE_CSV,";");
   ResetLastError();
   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;
     }
   ResetLastError();
     if(HandleWrite<0) // Failure when opening a file
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_NameW);
      else
         Alert("Error when opening a file ",File_NameW);
      PlaySound("Bzrrr.wav");
      return;
     }
   while(FileIsEnding(Handle)==false)
   {
      Skip =FileReadString(Handle);//пропускаем
      Skip =FileReadString(Handle);//первые два поля      
      Dat_DtTm =FileReadDatetime(Handle);// строка даты
      Skip =FileReadString(Handle);//пропускаем
      Skip =FileReadString(Handle);//еще
      Skip =FileReadString(Handle);//четыре
      Skip =FileReadString(Handle);//поля
      Text     =FileReadString(Handle);//считываем значение открытого интереса
      
      while(!FileIsLineEnding(Handle)) Skip =FileReadString(Handle);//пропускаем все остальные поля до конца строки
      
   Print("Dat_DtTm=",Dat_DtTm,"Text=",Text);
   if(FileIsEnding(Handle)==true){ Print("Конец отсчета=");}  
   if(FileIsLineEnding(Handle)){ Print("Конец строки=");} 
   chislo=StrToInteger(Text);//преобразую строку в число
   Qnt=FileWrite(File_NameW,Dat_DtTm,chislo);
   if (Qnt<0)Alert("не получилась запись=");
   }
   FileClose(Handle);
   FileClose(HandleWrite);
  }
//+------------------------------------------------------------------+
Файлы:
FinFutYY.txt  19 kb
 

Попробовал сделать  так же на массивах. Файл создается, но в него ничего не записывается.

datetime time_[];
double   OI[];
int shetchik;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  ArraySetAsSeries(time_,true);
  ArraySetAsSeries(OI,true);
   int Handle,HandleWrite,Qnt,chislo,i=0;
   datetime Dat_DtTm;
   string File_Name="FinFutYY.csv";//откуда считываем
   string File_NameW="OpenInteresGBP.csv";//куда записываем
   string Text, Skip;
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,",");// открываем файл для получения кол-ва строк
   ResetLastError();
   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)
   {
   Skip =FileReadString(Handle);//пропускаем
   if(FileIsLineEnding(Handle))shetchik=shetchik+1;
   if(FileIsEnding(Handle)){ Print("shetchik=",shetchik);FileClose(Handle);}//получили кол-во строк    
   }
   ArrayInitialize(time_,0);//массив времени 
   ArrayInitialize(OI,0);//массив занчений открытого интереса 
   ArrayResize(time_,shetchik+1);
   ArrayResize(OI,shetchik+1);
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,",");// открываем для считывания ячеек
   while(FileIsEnding(Handle)==false)
   {
      Skip =FileReadString(Handle);//пропускаем
      Skip =FileReadString(Handle);//первые два поля      
      Dat_DtTm =FileReadDatetime(Handle);// строка даты
      Skip =FileReadString(Handle);//пропускаем
      Skip =FileReadString(Handle);//еще
      Skip =FileReadString(Handle);//четыре
      Skip =FileReadString(Handle);//поля
      Text     =FileReadString(Handle);//считываем значение открытого интереса
      
      while(!FileIsLineEnding(Handle)) Skip =FileReadString(Handle);//пропускаем все остальные поля до конца строки
      
   if(FileIsEnding(Handle)==true){ Print("Конец отсчета=");}  
   if(FileIsLineEnding(Handle)){ Print("Конец строки=");} 
   chislo=StrToInteger(Text);
   i=i+1;
   time_[i]=Dat_DtTm;
   OI[i]=chislo;
   Print("time_[i]=",time_[i],"OI[i]=",OI[i]);
   }
   FileClose(Handle);
/////////////////////////////////////////получили все значения, дальше записываем
   HandleWrite=FileOpen(File_NameW,FILE_READ|FILE_WRITE|FILE_CSV,",");// открываем файл для записи
   ResetLastError();
     if(HandleWrite<0) // Failure when opening a file
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_NameW);
      else
         Alert("Error when opening a file ",File_NameW);
      PlaySound("Bzrrr.wav");
      return;
     }
   for (int r=1;r<=shetchik;r++)
   {
   Qnt=FileWrite(File_NameW,time_[r],OI[r]);
   if(Qnt <0){Alert("не удалось записать=");}   
   }
  }
Распринтовал последний цикл. for (int r=1;r<=shetchik;r++)
Все данные получаются корректно. Запись не идет.
2015.07.15 15:13:29.165 COT2 EURUSD,Daily: time_[r]=2015.01.06 00:00:00OI[r]=161876.0
2015.07.15 15:13:29.165 COT2 EURUSD,Daily: time_[r]=2015.01.13 00:00:00OI[r]=178563.0
2015.07.15 15:13:29.165 COT2 EURUSD,Daily: time_[r]=2015.01.20 00:00:00OI[r]=182860.0
 
 Qnt=FileWrite(File_NameW,time_[r],OI[r]);
 Qnt=FileWrite(HandleWrite,time_[r],OI[r]);
 
pako:

Спасибо!

Заработало, как это я пропустил. 

 

Сделал! Спасибо всем, кто подсказывал. 

 

А вообще возможно сделать так, чтобы в начале строки сравнивать название валюты, а если оно совпадает, то брать данные с файла. Если нет, то ничего не записывать.

Попробовал сделать так:

string cash="CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE";
while(FileIsEnding(Handle)==false)
   {
      Skip =FileReadString(Handle);
      if (Skip==cash)
      {
      Skip =FileReadString(Handle);//первые два поля      
      DataString =FileReadString(Handle);// строка даты
      StringReplace(DataString,"-",".");
      Dat_DtTm=StringToTime(DataString);
      Skip =FileReadString(Handle);//пропускаем
      Skip =FileReadString(Handle);//еще
      Skip =FileReadString(Handle);//четыре
      Skip =FileReadString(Handle);//поля
      Text     =FileReadString(Handle);//считываем значение открытого интереса
      
      while(!FileIsLineEnding(Handle)) Skip =FileReadString(Handle);//пропускаем все остальные поля до конца строки
      
      chislo=StrToInteger(Text);
      i=i+1;
      time_[i]=Dat_DtTm;
      OI[i]=chislo;
      }

 Ничего не выходит.

 

Вот итить, нашел в чем проблема, кавычку цепляет в первой подстроке

Skip="S&P GSCI COMMODITY INDEX - CHICAGO MERCANTILE EXCHANGE

 Как теперь ее убрать?

 
forexman77:

Вот итить, нашел в чем проблема, кавычку цепляет в первой подстроке

 Как теперь ее убрать?

Придумал. Может кому пригодится:

string Skip,valuta;
int r;
Skip =FileReadString(Handle);
r=StringLen(Skip);
valuta=StringSubstr(Skip, 1, r);
Print("valuta=",valuta);
 

Подправил в цикле строку и в предыдущем посте:

for(i=shetchik;i>=1;i--)
  {
  min=P[ArrayMinimum(P,p,i)];
  max=P[ArrayMaximum(P,p,i)];
  Minus[i]=min;
  Plus[i]=max;
  }

 Ошибки функций (ArrayMinimum,ArrayMaximum) перестали вылазить, но значения принтуются пустые:

2015.07.28 11:35:21.275 2010.12.29 00:00  iCOTL USDJPY,Daily: COT=2147483647.0
2015.07.28 11:35:21.275 2010.12.28 00:00  iCOTL USDJPY,Daily: COT=2147483647.0
2015.07.28 11:35:21.275 2010.12.27 00:00  iCOTL USDJPY,Daily: COT=2147483647.0
Причина обращения: