Скачать MetaTrader 5

Запись в файл с новой строки

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Юрий
93
Юрий 2010.11.13 09:07 

Помогите разобраться с записью в файл. 

Вот функция:

if(DayOfWeek()==day){ //Print("Woking . . .");
  ac=Symbol(); 
  ss1 = ac+day+";"+TimeToStr(TimeCurrent(),TIME_MINUTES)+";"+DoubleToStr(AccountBalance(),1)+";"+DoubleToStr(AccountEquity(),1)+"\n";
   WriteFile (path, ss1);
   day++;if(day==6)day=1;
}

........


//+------------------------------------------------------------------+
void WriteFile(string path,string buffer){
int count=StringLen(buffer),result,handle=_lopen(path,1); 
if(handle<0){ handle=_lcreat(path,0);
if(handle<0){ Print ("Ошибка создания файла ",path);return;}
result = _lclose (handle); }
handle=_lopen (path,1);if(handle<0){Print("Ошибка открытия файла ",path);return;}
result=_llseek(handle,0,0);if(result<0) {Print("Ошибка установки указателя"); return; }
buffer = buffer + "\n";
result=_lwrite(handle,buffer,count); if(result<0)Print("Ошибка записи в файл ",path," ",count," байт");
//result=_lclose (handle); if(result<0)Print("Ошибка закрытия файла ",path);
  }

Мне нужно, что бы новые данные записывались с новой строки в Excell, перерыл весь код на форуме, включая учебник и документацию, но результат нулевой :(((
Геннадий
37
Геннадий 2010.11.13 09:13  

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

//+------------------------------------------------------------------+
//| Запись строки в файл                                             |
//+------------------------------------------------------------------+
void WritingLineInFile(string FileName, string text)
{
  int file_handle=FileOpen(FileName, FILE_READ|FILE_WRITE, " ");

        if (file_handle>0)
        {
                FileSeek(file_handle, 0, SEEK_END);
                FileWrite(file_handle, text);
                FileClose(file_handle);
        }
}
Юрий
93
Юрий 2010.11.13 09:18  

правка в прямом эфире...

Юрий
93
Юрий 2010.11.13 09:23  

спасибо, получилось.

 я Кимовскую тоже гонял, но строка была другой   handle = FileOpen("Summa.txt", FILE_CSV|FILE_WRITE, '\t');

IgorM М
4801
IgorM М 2010.11.13 09:29  
Donatom:

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

 

 


не хочу проверять, но думаю FileFlush() https://docs.mql4.com/ru/files/FileFlush должен помочь, чтобы не закрывать каждый раз файл, если FileFlush() исправит положение, то открывать файл лучше в init(), а закрывать в deinit(), делал нечто похожее, кажется добавление еще раз FileWrite(file_handle, ""); запишет новую строку - т.е. каждый FileWrite() пишется с новой строки - проверять нужно

ЗЫ: у меня нестандартные оффлайн графики постоянно пишутся без  закрытия, с помощью FileFlush()

Aleksander
1673
Aleksander 2010.11.13 09:40  
int FileWriteArray( int handle, object array[], int start, int count)
Функция записывает массив в бинарный файл. Массивы типа int, bool, datetime и color записываются поэлементно как 4-байтовые целые числа. Массивы типа double записываются поэлементно как 8-байтовые числа c плавающей запятой. Массивы типа string записываются построчно, после каждой строки автоматически добавляется признак конца строки "\r\n".

delimiter - Знак разделителя для csv-файлов. По умолчанию применяется символ ';'.
т.е. НЕ надо их вставлять
S)+";"+Do

можно и пустой массивчик сделать :) из 1го-2х элементов :) или всётаки добавить...
+DoubleToStr(AccountEquity(),1)+"\r\n";
      
FileWrite(path, Symbol(), TimeToStr(TimeCurrent(),TIME_DATE),DoubleToStr(AccountBalance(),1),DoubleToStr(AccountEquity(),1),TimeToStr(TimeCurrent(),TIME_SECONDS)+"\r\n");

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