Schreiben in die Datei in eine neue Zeile

 

Helfen Sie mir herauszufinden, wie man in eine Datei schreibt.

Hier ist die Funktion:

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

Ich brauche neue Daten, die in eine neue Zeile in Excell geschrieben werden sollen. Ich habe den gesamten Code im Forum durchgesehen, einschließlich des Tutorials und der Dokumentation, aber kein Ergebnis :(((
 

Ich verwende die Funktion von Kim - Datei öffnen - eine Zeile schreiben - Datei schließen und dann herumgehen.

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

Live-Schnitt...

 

Danke, es hat funktioniert.

Ich habe auch Kims Programm ausgeführt, aber die Zeichenfolge war anders handle = FileOpen("Summa.txt", FILE_CSV|FILE_WRITE, '\t');

 
Donatom:

Ich verwende Kims Funktion - Datei öffnen - String schreiben - Datei schließen und dann herum.


nicht überprüfen, aber ich denke, FileFlush() https://docs.mql4.com/ru/files/FileFlush sollte helfen, die Datei nicht jedes Mal zu schließen, wenn FileFlush() die Situation behebt, ist es besser, die Datei in init() zu öffnen und in deinit() zu schließen, ich habe etwas Ähnliches getan, es scheint, dass das erneute Hinzufügen von FileWrite(file_handle, ""); eine neue Zeile schreibt - das heißt, jedes FileWrite() wird mit einer neuen Zeile geschrieben - überprüfen Sie es

ZS: Ich schreibe immer Nicht-Standard-Offline-Grafiken, ohne sie zu schließen, mit FileFlush()

 
int FileWriteArray( int handle, objectarray[], int start, int count)
Die Funktion schreibt ein Array in eine Binärdatei. Int-, bool-, datetime- und color-Arrays werden als 4-Byte-Ganzzahlen geschrieben. Arrays vom Typ double werden als 8-Byte-Gleitkommazahlen geschrieben. Arrays des Typs String werden zeilenweise geschrieben, wobei nach jeder Zeile automatisch ein Zeilenendezeichen "\r\n" hinzugefügt wird.

Begrenzungszeichen - Begrenzungszeichen für csv-Dateien. Standardmäßig wird ';' verwendet.
d.h. sie NICHT einfügen
S)+";"+Do

Sie können auch ein leeres Array :) mit 1 oder 2 Elementen :) erstellen oder...
+DoubleToStr(AccountEquity(),1)+"\r\n";
      
FileWrite(path, Symbol(), TimeToStr(TimeCurrent(),TIME_DATE),DoubleToStr(AccountBalance(),1), DoubleToStr(AccountEquity(),1),TimeToStr(TimeCurrent(),TIME_SECONDS)+"\r\n");

 

Hallo zusammen. Ich versuche, jede neue Bestellung in eine neue Zeile zu schreiben. Können Sie mir sagen, was ich falsch mache? Es bleibt nur der letzte offene Auftrag übrig.

void OnTick()

{
int i, Typ;
double lot=0,sl=0,tp=0;
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(AuftragsSymbol()==Symbol())
{
if(Auftragsart()==OP_BUY)
{
Typ=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);
//--- Datei öffnen
int h=FileOpen("Copy.txt",FILE_WRITE,";");
FileSeek(h, 0, SEEK_END);
FileWrite(h,_Symbol,typ,sl,tp,lot);
FileClose(h); // Schließen der Datei

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

Hallo zusammen. Ich versuche, jede neue Bestellung in eine neue Zeile zu schreiben. Können Sie mir sagen, was ich falsch mache? Nur das zuletzt geöffnete Dokument bleibt geschrieben.


Die Datei wird aufgrund falscher Flaggen immer wieder überschrieben. Sie sollten die Datei nicht nur zum Schreiben, sondern auch zum Lesen öffnen. Dann wird sie nicht wiederhergestellt:

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

Die Datei wird ständig überschrieben, weil sie falsch gekennzeichnet ist. Sie sollten die Datei nicht nur zum Schreiben, sondern auch zum Lesen öffnen. Dann wird sie nicht wiederhergestellt:

Ich danke Ihnen vielmals. Herzlichen Dank!

Die Beschreibung der Funktion selbst enthält diese Information, aus irgendeinem Grund habe ich sie übersehen und wusste nicht einmal, welchen Weg ich als nächstes gehen sollte... Ich dachte, ich hätte einen falschen Dateityp gewählt, nämlich txt statt csv, aber es stellte sich als sehr einfach heraus. )))

 
Können Sie mir sagen, wie ich eine Zeichenfolge nach dem Lesen löschen kann, gibt es eine einfache Möglichkeit, dies zu tun?
 
EfremovSergey:
Können Sie mir sagen, wie ich eine Zeile löschen kann, nachdem ich sie gelesen habe, oder gibt es dafür eine einfache Möglichkeit?

In den meisten Fällen ist es besser, die gesamte Datei zu lesen, die erforderlichen Änderungen an den Daten im RAM vorzunehmen und dann die gesamte Datei zu überschreiben. Dies ist einfacher, als die Daten innerhalb der geöffneten Datei zu verschieben.
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...