Schreiben in die Datei in eine neue Zeile - Seite 3

 
Alexey Viktorov:

Und das Konzept ist nur für Sie an der Oberfläche.........

Ich meinte, dass die Anregung (das Konzept) "auf eigene Faust zu experimentieren" nicht geäußert werden muss, es ist klar, wie es ist. Igor Ich habe sehr wohl verstanden und selbst über diese Option nachgedacht, weil sie die einfachste ist, aber für mich ist sie imho nicht sehr geeignet für die oben beschriebenen Umstände.

 
EfremovSergey:

Der Haken an der Sache ist, dass es 10 Programme gibt, die in die Datei schreiben, und weitere 10, die aus ihr lesen.

Und in diesem Fall ist es besser, die Datei ganz aufzugeben und mit einer SQLite-Datenbank zu arbeiten. Dies ist sehr ähnlich wie die Arbeit mit Dateien, die Sie auch in einem gemeinsamen Ordner erstellen können, aber die Verarbeitung, Suche und das Löschen der Zeichenfolge ist viel einfacher.

 

Sergey, wenn du diese Datei nicht mit den Augen sehen musst, dann schreibe ein Array deiner Daten auf einmal in die Datei

int eHandle=FileOpen(eFileName,FILE_BIN|FILE_WRITE);
if(eHandle!=INVALID_HANDLE)
   {
   //сначала записываем размер массива
   FileWriteInteger(eHandle,ArraySize(eArray),INT_VALUE);
   //выгружаем данные из массива в файл
   FileWriteArray(eHandle,eArray,0,WHOLE_ARRAY);
   FileClose(eHandle);
   }

dann jederzeit das Array aus der Datei nehmen

if(FileIsExist(eFileName))
   {
   eHandle=FileOpen(eFileName,FILE_BIN|FILE_READ);
   if(eHandle!=INVALID_HANDLE)
      {
      //сначала читаем и устанавливаем размер массива
      ArrayResize(eArray,FileReadInteger(eHandle,INT_VALUE));
      //затем выгружаем данные из файла в массив
      FileReadArray(eHandle,eArray,0,WHOLE_ARRAY);
      FileClose(eHandle);
      }
   }

Und arbeiten Sie mit dem Array, wie Sie wollen. Das letzte Element löschen, weitere hinzufügen.

 
Alexey Viktorov:

Und in diesem Fall ist es besser, die Datei ganz aufzugeben und mit einer SQLite-Datenbank zu arbeiten. Dies ist der Arbeit mit Dateien sehr ähnlich, die Sie auch in einem gemeinsamen Ordner erstellen können, aber das Bearbeiten, Suchen und Löschen von Zeilen ist viel einfacher.

Unterstützt MQL4 die Arbeit mit SQLite? Ist es nicht nur das TXT- und CSV-Format?

Der Zugriff auf die Datei erfolgt über einen symbolischen Link, es spielt keine Rolle, wo die Datei liegt, in welchem Ordner.

 
Aleksei Stepanenko:

Sergey, wenn du diese Datei nicht mit den Augen sehen musst, dann schreibe ein Array deiner Daten auf einmal in die Datei

dann jederzeit das Array aus der Datei nehmen

Und arbeiten Sie mit dem Array, wie Sie wollen. Das letzte Element löschen, ein weiteres hinzufügen.

Was ist also der Unterschied, wird das Array in jedem Fall Zeile für Zeile in die Datei geschrieben, oder ist es in diesem Fall möglich, zumindest das letzte oder erste Element zu entfernen, array=string?

 

Ich verstehe die Frage nicht ganz. Sie haben eine Reihe von Daten, mit denen Sie jede Art von Manipulation mit Leichtigkeit durchführen können. Und ein einfaches Schreiben und Lesen aus der Datei in vier Codezeilen. Das ist der Vorteil. Warum sollte man darüber nachdenken, wie ein Array in eine Datei geschrieben wird?

Sie nehmen die erforderlichen Änderungen im Array vor, laden das geänderte Array in eine Datei hoch und das war's.

 
Aleksei Stepanenko:

Ich verstehe die Frage nicht ganz. Sie haben eine Reihe von Daten, mit denen Sie jede Art von Manipulation mit Leichtigkeit durchführen können. Und ein einfaches Schreiben und Lesen aus der Datei in vier Codezeilen. Das ist der Vorteil. Warum sollte man darüber nachdenken, wie ein Array in eine Datei geschrieben wird?

Sie nehmen die erforderlichen Änderungen im Array vor, laden das geänderte Array in eine Datei hoch und das war's.

Die Schwierigkeit besteht darin, dass 20 Anwendungen gleichzeitig mit ein und demselben Array arbeiten müssen und es unmöglich ist, festzustellen, welche bearbeitete Version des Arrays im Moment relevant ist.

Angenommen, der erste Expert Advisor hat ein Array bearbeitet und veröffentlicht, und eine andere Version des Arrays wurde darüber geschrieben, ohne die vorherige zu berücksichtigen, und das war's... Verwirrung...

Wenn z.B. jeder Expert Advisor die zugehörige Zeile nach dem Lesen löschen könnte, dann würde alles funktionieren - niemand stört irgendjemanden und die Datei wird nicht mit redundanten Daten überlastet, aber jedes Mal, wenn das bearbeitete Array in einem Wettlauf geschrieben wird, ist es unklar, wie man die Aktualität der Daten von jedem der 20 Expert Advisors synchronisieren kann.

 

Die Verwaltung des Zugriffs mehrerer EAs auf dieselbe Datei ist etwas, an das Sie denken müssen.

Hier ist etwas, über das Sie nachdenken sollten:

1. Um zu verhindern, dass zwei EAs gleichzeitig an der gleichen Datei arbeiten, erstellen Sie eine weitere Flag-Datei. Wenn diese Datei nicht existiert, hat der Expert Advisor das Recht, die Datei mit den Daten zu öffnen und vorher eine Dateiflagge zu erstellen, die den anderen anzeigt, dass er bis jetzt beschäftigt ist. Nach dem Lesen und Schreiben löscht der EA die Dateiflagge. Die Daten sind nun für jeden anderen EA frei zugänglich.

2. Sie können Variablen erstellen, um Informationen über jeden Expert Advisor zu sammeln, der die Daten in diesem Array verwendet hat. Schreiben Sie diese Variablen in dieselbe Datei.

3. Erstellen Sie anstelle des üblichen Arrays ein Array von Strukturen, das verschiedene Datentypen enthält und sehr anschaulich ist.

struct MyData
   {
   int EANumber;
   datetime writeTime;
   double mydata1;
   double mydata2;
   } mydata[];
 
Aleksei Stepanenko:

Die Verwaltung mehrerer EAs, die auf dieselbe Datei zugreifen, ist etwas, worüber Sie nachdenken müssen.


Wenn mehrere Expert Advisors einen Datensatz schreiben+hinzufügen+auswählen+lesen müssen, dann sind Datenbanken unwillkürlich beteiligt.

Sie können"globale Variablen" und Flaggen verwenden, aber warum auch nicht?

Das ist eine Sache des DBMS. Verschiedene, relationale, NoSQL und andere, aber es ist ihre. Und dort, in ihrer Mechanik, wird alles über Jahre und Jahrzehnte feinjustiert. Alle locs-Flaggen-Semaphoren-Mutexe.
Der Versuch, sie zu reproduzieren, ist reine Zeitverschwendung.

 
Ganz genau!