Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Добавляй наш канал в друзья и следи за новостями!
Alexander
343
Alexander 2014.12.14 19:46 
input string filename="table.csv";
input bool КОСТЫЛЬ=false;

void OnStart()
  {
   int h=FileOpen(filename,FILE_SHARE_READ|FILE_CSV,";");
   if(h<0){Print("Error opening file ",GetLastError());return;}
   
   Print("File is successfully opened, FileIsLineEnding(h)=",FileIsLineEnding(h),
   ", FileIsEnding(h)=",FileIsEnding(h),", FileTell(h)=",FileTell(h));

   if(КОСТЫЛЬ) 
      {
       FileReadString(h);  
       FileSeek(h,0,SEEK_SET);
       Print("After FileSeek FileIsLineEnding(h)=",FileIsLineEnding(h));
      }
      
   while(!FileIsLineEnding(h)) Print("Read text from CSV: ", FileReadString(h));
 
   FileClose(h);
  }

 

Суть проблемы заключается в том, что сразу после открытия CSV файла функция FileIsLineEnding() возвращает либо false, либо true.

Если на график с одним ID впервые накинуть вышеприведенный скрипт, то функция вернет false, как и должно быть. Но при последующих запусках скрипта на график с этим ID функция будет возвращать true (конец первой строки).

Проблему решает приведенный в коде костыль.

Проверялось в билдах 765 и 745.

Ihor Herasko
8470
Ihor Herasko 2014.12.14 20:33  
tuner:

 

Суть проблемы заключается в том, что сразу после открытия CSV файла функция FileIsLineEnding() возвращает либо false, либо true.

Если на график с одним ID впервые накинуть вышеприведенный скрипт, то функция вернет false, как и должно быть. Но при последующих запусках скрипта на график с этим ID функция будет возвращать true (конец первой строки).

Проблему решает приведенный в коде костыль.

Проверялось в билдах 765 и 745.

Не проверял, но сразу бросается в глаза отсутствие флага FILE_READ при открытии файла (его нужно использовать совместно с FILE_SHARE_READ). Скорее всего, проблема именно в этом.
Alexander
343
Alexander 2014.12.14 20:42  
int h=FileOpen(filename,FILE_READ|FILE_CSV,";");
так тоже пробовал, разницы нету
Ihor Herasko
8470
Ihor Herasko 2014.12.14 20:48  
tuner:
так тоже пробовал, разницы нету

Я имел в виду совместное использование флагов:

int h=FileOpen(filename,FILE_READ | FILE_SHARE_READ | FILE_CSV,";");
Alexander
343
Alexander 2014.12.14 20:52  
Scriptong:

Я имел в виду совместное использование флагов:

 

Да, я понимаю что совместное, но я имею в виду что с таким кодом

FileOpen(filename,FILE_READ|FILE_CSV,";");

 проблема с функцией FileIsLineEnding() так же проявляется

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий