Scrivere nel file su una nuova linea

 

Aiutami a capire come scrivere su un file.

Ecco la funzione:

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

Ho bisogno di scrivere nuovi dati su una nuova riga in Excell, ho guardato tutto il codice sul forum, incluso il tutorial e la documentazione, ma nessun risultato :((((
 

Uso la funzione di Kim - aprire il file - scrivere una riga - chiudere il file e poi andare in giro.

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

montaggio dal vivo...

 

Grazie, ha funzionato.

Ho anche eseguito quello di Kim, ma la stringa era diversa handle = FileOpen("Summa.txt", FILE_CSV|FILE_WRITE, '\t');

 
Donatom:

Uso la funzione di Kim - aprire il file - scrivere la stringa - chiudere il file e poi in giro.


non voglio controllare, ma penso che FileFlush() https://docs.mql4.com/ru/files/FileFlush dovrebbe aiutare a non chiudere il file ogni volta, se FileFlush() risolve la situazione, è meglio aprire il file in init(), e chiudere in deinit(), ho fatto qualcosa di simile, sembra che aggiungere ancora una volta FileWrite(file_handle, ""); scriverà una nuova linea - cioè, ogni FileWrite() è scritto con una nuova linea - controllate

ZS: scrivo sempre grafici non standard offline senza chiuderli, usando FileFlush()

 
int FileWriteArray( int handle, oggettoarray[], int start, int count)
La funzione scrive un array in un file binario. Gli array Int, bool, datetime e color sono scritti come interi a 4 byte. Gli array di tipo double sono scritti come numeri a virgola mobile a 8 byte. Gli array di tipo stringa sono scritti riga per riga, con un segno di fine riga "\r\n" aggiunto automaticamente dopo ogni riga.

delimitatore - Carattere delimitatore per i file csv. Per default viene usato ';'.
cioè NON inserirli
S)+";"+Do

Puoi anche fare un array vuoto :) di 1 o 2 elementi :) o aggiungere...
+DoubleToStr(AccountEquity(),1)+"\r\n";
      
FileWrite(path, Symbol(), TimeToStr(TimeCurrent(),TIME_DATE),DoubleToStr(AccountBalance(),1), DoubleToStr(AccountEquity(),1),TimeToStr(TimeCurrent(),TIME_SECONDS)+"\r\n");

 

Ciao a tutti. Sto cercando di scrivere ogni nuovo ordine in una nuova linea, potresti dirmi cosa sto sbagliando? Rimane solo l'ultimo ordine aperto.

void OnTick()

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

sl=NormalizeDouble(sl,Digits);
tp=NormalizeDouble(tp,Digits);
//--- Aprire il file
int h=FileOpen("Copy.txt",FILE_WRITE,";");
FileSeek(h, 0, SEEK_END);
FileWrite(h,_Symbol,type,sl,tp,lot);
FileClose(h); // chiude il file

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

Ciao a tutti. Sto cercando di scrivere ogni nuovo ordine in una nuova linea, potresti dirmi cosa sto sbagliando? Solo l'ultimo aperto rimane scritto.


Il file continua ad essere sovrascritto a causa di bandiere sbagliate. Non dovreste aprire il file solo per scrivere, ma anche per leggere. Allora non verrà ricreato:

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

Il file viene costantemente sovrascritto a causa di flag errati. Non dovreste aprire il file solo per scrivere, ma anche per leggere. Allora non verrà ricreato:

Grazie mille. Grazie mille!

La descrizione della funzione stessa contiene questa informazione, per qualche motivo mi è sfuggita e non sapevo nemmeno che strada prendere... Pensavo di aver selezionato un tipo di file sbagliato, txt invece di csv, ma si è rivelato molto semplice. )))

 
Puoi dirmi come cancellare una stringa dopo averla letta, c'è un modo semplice per farlo?
 
EfremovSergey:
Puoi dirmi come cancellare una riga dopo averla letta, c'è un modo semplice per farlo?

Nella maggior parte dei casi, è meglio leggere l'intero file, fare le modifiche necessarie ai dati nella RAM, e poi sovrascrivere l'intero file. Questo è più facile che spostare i dati all'interno del file aperto.
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...