Помогите определить колличество строк в файле

 

Всем привет.Пишу функцию для работы с тикетами из истории и застрял на определении колличества строк в файле txt.Пересмотрел ДОК пока что вот к чему дакопался.

int file_handle2=FileOpen(FileName2,FILE_READ|FILE_WRITE," ");
   if(file_handle2>0)
     {
      string filestrread=FileReadString(file_handle2,0);
      FileSeek(file_handle2,0,SEEK_SET);
      filestrread=FileReadString(file_handle2,0);
      
      string to_split=filestrread;
      string sep="\n";  
      ushort u_sep;     
      string result[];               
      u_sep=StringGetCharacter(sep,0); 
      
      int  k=StringSplit(to_split,sep,result);
      if(k>0) 
     { 
      for(int i=0;i<k;i++) 
        { 
         
         Comment(result[i]); 
        } 
     }
      
     }

в файле набор тикетов 

123456789

987654321

123654987


в результате нужно получить колличество строк чтоб двигать указатель.Пока что ничего не получилось. Возможно проблема в указании разделителя string sep="\n";

 
Yevheniy Kopanitskyy:

Всем привет.Пишу функцию для работы с тикетами из истории и застрял на определении колличества строк в файле txt.Пересмотрел ДОК пока что вот к чему дакопался.

в файле набор тикетов 

123456789

987654321

123654987


в результате нужно получить колличество строк чтоб двигать указатель.Пока что ничего не получилось. Возможно проблема в указании разделителя string sep="\n";

А вам это точно нужно писать в файл?

 
Yevheniy Kopanitskyy:

Всем привет.Пишу функцию для работы с тикетами из истории и застрял на определении колличества строк в файле txt.Пересмотрел ДОК пока что вот к чему дакопался.

в файле набор тикетов 

123456789

987654321

123654987


в результате нужно получить колличество строк чтоб двигать указатель.Пока что ничего не получилось. Возможно проблема в указании разделителя string sep="\n";

В документации есть сколько какие данные занимают памяти. Например double занимает 8 байт, но вся проблема в том, что записывая и читая в файл .txt или .csv не получается это правило, никак не получается переместить указатель чтобы попасть в начало строки, то 7, то 9 байт получается и никакой закономерности. НО!!! Если писать в файл .bin то всё получается.

 
Yevheniy Kopanitskyy:

Всем привет.Пишу функцию для работы с тикетами из истории и застрял на определении колличества строк в файле txt.Пересмотрел ДОК пока что вот к чему дакопался.

в файле набор тикетов 

123456789

987654321

123654987


в результате нужно получить колличество строк чтоб двигать указатель.Пока что ничего не получилось. Возможно проблема в указании разделителя string sep="\n";

Придется все строки прочитать и подсчитать их количество, что-то вроде

int nstr = 0;
while(!FileIsEnding(file_handle)) 
{ 
    str=FileReadString(file_handle); 
    nstr++;
} 
А вообще такое надо делать в бинарном виде, можно сразу читать-писать массивами, при этом первое число - длина массива.
 

Мне в принципе всё равно куда писать

В записи будет максимум 10 строк иными словами 10 номеров тикетов. Тут суть в том чтоб при определённых условиях определить колличество линий, взять с каждой линии номера тикетов и всунуть их в переменных для обработки. А писать нужно для того чтоб в случаи выключения советника и его переключении можно было продолжить торговать

 
Yevheniy Kopanitskyy:

Мне в принципе всё равно куда писать

В записи будет максимум 10 строк иными словами 10 номеров тикетов. Тут суть в том чтоб при определённых условиях определить колличество линий, взять с каждой линии номера тикетов и всунуть их в переменных для обработки. А писать нужно для того чтоб в случаи выключения советника и его переключении можно было продолжить торговать

Повторяю - пишите в бинарном виде сразу массивом и читайте массивом. Так как справкой вы явно пользоваться не умеете, скопипастил

input string InpFileName="data.bin"; 
input string InpDirectoryName="SomeFolder"; 
//+------------------------------------------------------------------+ 
//| Структура для хранения данных о ценах                            | 
//+------------------------------------------------------------------+ 
struct prices 
  { 
   datetime          date; // дата 
   double            bid;  // цена бид 
   double            ask;  // цена аск 
  }; 
//--- глобальные переменные 
int    count=0; 
int    size=20; 
string path=InpDirectoryName+"//"+InpFileName; 
prices arr[]; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- выделение памяти для массива 
   ArrayResize(arr,size); 
//--- 
   return(INIT_SUCCEEDED); 
  } 
//+------------------------------------------------------------------+ 
//| Expert deinitialization function                                 | 
//+------------------------------------------------------------------+ 
void OnDeinit(const int reason) 
  { 
//--- запись оставшихся count строк, если count<n 
   WriteData(count); 
  } 
//+------------------------------------------------------------------+ 
//| Expert tick function                                             | 
//+------------------------------------------------------------------+ 
void OnTick() 
  { 
//--- сохраним данные в массив 
   arr[count].date=TimeCurrent(); 
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); 
//--- отобразим текущие данные 
   Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask); 
//--- увеличим счетчик 
   count++; 
//--- если массив заполнился, то записываем данные в файл и обнуляем его 
   if(count==size) 
     { 
      WriteData(size); 
      count=0; 
     } 
  } 
//+------------------------------------------------------------------+ 
//| Запись n элементов массива в файл                                | 
//+------------------------------------------------------------------+ 
void WriteData(const int n) 
  { 
//--- откроем файл 
   ResetLastError(); 
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN); 
   if(handle!=INVALID_HANDLE) 
     { 
      //--- запишем данные массива в конец файла 
      FileSeek(handle,0,SEEK_END); 
      FileWriteArray(handle,arr,0,n); 
      //--- закрываем файл 
      FileClose(handle); 
     } 
   else 
      Print("Failed to open the file, error ",GetLastError()); 
  }
Причина обращения: