Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что MQL5 способен создавать собственные графические инструменты?
akc
125
akc 2012.11.26 10:46 

Не могу разобраться, помогите.

В начале обработки тика читаю строки из файла, заполняю массив

   string sn1="",sn2="",sn3="",sn4="",sn5="";
   int handle = -1;

   for(int j=0; j<5; j++)
      {
        handle=FileOpen(filePares,FILE_CSV|FILE_READ,' ');
        Sleep(nz);
        if (handle>0) break;
      }
   if(handle>0)
   {
     ArrayResize(mPares,0);
     int i =0;
     bool StrIsEmpty=true; //устанавливаем флаг
     while(true)
     {
        sn1    = FileReadString(handle);//номер тикета -->
        if(StringLen(sn1)==0)
        { 
            FileClose(handle); 
            return(i); //если пустая строка в конце файла - ее игнорим
        } 
        sn2    = FileReadString(handle);
        sn3    = FileReadString(handle);
        sn4    = FileReadString(handle);
        sn5    = FileReadString(handle);
        i++;
        ArrayResize(mPares,i);
        mPares[i-1,0] = StrToInteger(sn1);
        mPares[i-1,1] = StrToInteger(sn2);
        mPares[i-1,2] = StrToInteger(sn3);
        mPares[i-1,3] = StrToInteger(sn4);
        mPares[i-1,4] = StrToInteger(sn5);
        StrIsEmpty=false;
        Print("прочли строку "+mPares[i-1,0]+" "+mPares[i-1,1]+" "+mPares[i-1,2]+" "+mPares[i-1,3]+" "+mPares[i-1,4]);
     }

Затем открываю этот файл на запись с обнулением

int handle=FileOpen(filePares,FILE_CSV|FILE_WRITE,' ');
FileClose(handle);

 внутри просматриваю массив, и как правило снова пишу массив в файл строками через функцию

int WriteLnToFileNoTest(string file, string Ln) //Пишет строку в файл
{
   for(int i=0; i<5; i++)
      {
         int handle=FileOpen(file,FILE_CSV|FILE_READ | FILE_WRITE,' ');
         if (handle>0) break;
         Sleep(nz);
      }
   if(handle>0)
   {
     int n=FileWrite(handle,Ln);
     if(n<0)  Print("не удалось записать в открытый файл "+file+" handle "+handle);
     else Print("записали строку "+Ln);
     FileClose(handle);
   }
   else Print("не удалось открыть файл "+file+" handle "+handle); 
}

 затем обрабатываю торговые сигналы, и этой же функцией могу дописать строку в файл.

 

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

В чем баг, подскажите, плиз. 

Mikhail Kozhemyako
1180
Mikhail Kozhemyako 2012.11.26 11:11  

AKC:
AKC:

Не могу разобраться, помогите.

В начале обработки тика читаю строки из файла, заполняю массив

Затем открываю этот файл на запись с обнулением

 внутри просматриваю массив, и как правило снова пишу массив в файл строками через функцию

 затем обрабатываю торговые сигналы, и этой же функцией могу дописать строку в файл.

 

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

В чем баг, подскажите, плиз. 


 


Не могу разобраться, помогите.

В начале обработки тика читаю строки из файла, заполняю массив

Затем открываю этот файл на запись с обнулением

 внутри просматриваю массив, и как правило снова пишу массив в файл строками через функцию

 затем обрабатываю торговые сигналы, и этой же функцией могу дописать строку в файл.

 

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

В чем баг, подскажите, плиз. 

 

При дописывании в файл следует использовать функции позиционирования int FileTell(    int handle); bool FileSeek(    int handle, int offset, int origin)

https://docs.mql4.com/ru/files 

akc
125
akc 2012.11.26 11:21  
Sepulca:

При дописывании в файл следует использовать функции позиционирования int FileTell(    int handle); bool FileSeek(    int handle, int offset, int origin)

https://docs.mql4.com/ru/files 


Я пишу/читаю текстовый файл. Побайтово искать смещение затруднительно, т.к. строки разной длины.

А куда ставится указатель при открытии файла? Я ведь для каждой строки снова его открываю.

akc
125
akc 2012.11.26 11:34  
Sepulca:

При дописывании в файл следует использовать функции позиционирования int FileTell(    int handle); bool FileSeek(    int handle, int offset, int origin)

https://docs.mql4.com/ru/files 


Спасибо! Помогло.

     if (FileSeek(handle, FileSize(handle),SEEK_SET))
        int n=FileWrite(handle,Ln);

 Теперь пишет в конец файла.

А что же происходило, когда строка писалась в начало? Почему дальше первой строки не читалось? 

akc
125
akc 2012.11.26 12:06  
AKC:


Спасибо! Помогло.

 Теперь пишет в конец файла.

А что же происходило, когда строка писалась в начало? Почему дальше первой строки не читалось? 


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

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