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

 

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

Вот функция:

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, перерыл весь код на форуме, включая учебник и документацию, но результат нулевой :(((
 

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

//+------------------------------------------------------------------+
//| Запись строки в файл                                             |
//+------------------------------------------------------------------+
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);
        }
}
 

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

 

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

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

 
Donatom:

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

 

 


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

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

 
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");

 

Всем привет. Пытаюсь каждый новый ордер записать в новую строку, подскажите что делаю не правильно? Остаётся записан только последний открытый.

void OnTick()

  {
  int i, type;
  double lot=0,sl=0,tp=0;
  
   for(i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               type=0;
               lot=OrderLots();
               sl=OrderStopLoss();
               tp=OrderTakeProfit();
              }
            if(OrderType()==OP_SELL)
              {
               type=1;
               lot=OrderLots();
               sl=OrderStopLoss();
               tp=OrderTakeProfit();
              }
           }
        }
     }

   sl=NormalizeDouble(sl,Digits);
   tp=NormalizeDouble(tp,Digits);
   
   //--- Открываем файл 
   
   int h=FileOpen("Copy.txt",FILE_WRITE,";");
   FileSeek(h, 0, SEEK_END);
   FileWrite(h,_Symbol,type,sl,tp,lot);
   FileClose(h); // закрываем файл

   Comment("\n Order Type: ",type,
           "\n Order Lots: ",lot,
           "\n StopLoss: ",sl,
           "\n TakeProfit: ",tp);
  }
Купить советник или заказать?
Купить советник или заказать?
  • AM2
  • www.forexsystems.biz
Не секрет, что у каждого трейдера торгующего на рынке Форекс со временем складывается собственная стратегия со своими правилами и запретами. Причем не каждый сможет научиться торговать именно Вашей стратегией в прибыль, даже, если она дает Вам профит в течении продолжительного времени. У каждого свои эмоции, свой характер и свои запросы. Купить...
 
EfremovSergey:

Всем привет. Пытаюсь каждый новый ордер записать в новую строку, подскажите что делаю не правильно? Остаётся записан только последний открытый.


Файл постоянно перезаписывается из-за неправильных флагов. Нужно открывать файл не только на запись, но и на чтение. Тогда не произойдет его пересоздание:

 int h=FileOpen("Copy.txt",FILE_WRITE | FILE_READ,";");
 
Ihor Herasko:

Файл постоянно перезаписывается из-за неправильных флагов. Нужно открывать файл не только на запись, но и на чтение. Тогда не произойдет его пересоздание:

Большое спасибо. Очень вам признателен!

В описании самой функции содержится эта информация, почему-то проглядел и уже даже не знал в какую сторону копать дальше... начал думать что выбрал неверный тип файла, txt вместо csv, а оказывается всё просто. )))

 
Подскажить плз как можно удалить строку после её прочтения, есть какой-нибудь простой способ данной операции?
 
EfremovSergey:
Подскажить плз как можно удалить строку после её прочтения, есть какой-нибудь простой способ данной операции?

В большинстве случаев лучше считать весь файл, произвести с данными необходимые изменения в оперативной памяти, а потом перезаписать файл целиком. Это проще, чем перемещать данные внутри открытого файла.
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...