Files lesen - Seite 2

 
Dominik Egert:
Junge, das wird so nichts.

Mach ne SQL in Memory und nutze diese als Datenspeicher.

Du wirst sonst verrückt.

Mag am Anfang schwer sein, lohnt aber hinten raus.


Richtig aber wenig hilfreich wenn er schon an PrintFormat hängen bleibt.
 
Dominik Egert:
Junge, das wird so nichts.

Mach ne SQL in Memory und nutze diese als Datenspeicher.

Du wirst sonst verrückt.

Mag am Anfang schwer sein, lohnt aber hinten raus.


Scheint wohl wahr zu sein. Meinst du das hier:

https://www.mql5.com/de/articles/862



CARL SCHREIBER´s Ansatz

int hdl  = FileOpen(fName,FILE_READ|FILE_SHARE_READ|FILE_BIN|FILE_COMMON);
if(hdl < 0) {/*  Fehlermeldung  */}
string c, allLines[], allCells[], 
       f = FileReadString(hdl,(int)FileSize(hdl)); // lese ganze Datei
FileClose(hdl);
int nZ,nL = StringSplit(f,StringGetCharacter("\n",0),allLines); // jetzt hab ich ein Array mit alle Zeilen
while(nL-->0) {
   nZ = StringSplit( allLines[nL] ,StringGetCharacter(";",0),allCells); // jetzt hab ich ein Array mit allen Zellen der Zeile
   while(nZ-->0) {
      c = allCells[nZ]; // alle Zellen werden verarbeitet
      ...
   }
}
/* ungetestet */

Habe deinen Ansatz mal weiter verfolgt. Die FileReadString() liest jeweils nur eine Zeile aus. Musste sie daher in eine while Schleife packen, damit sie mir alle Zeilen liest.
Das Problem: Er spuckt eine Fehlermeldung aus "Abnormal Termination" und braucht über 3Minuten um dann mal mein Print statement auszuspucken. die letzte Zahl des Prints ist der Zähler i, also die Größe des Arrays. Wieso braucht die Kiste so lange um die paar Zeilen zu lesen und in arrays zu verpacken..?


string c, allLines[], allCells[], fileString,line[];
string fName = "AAVEUSDT_2019_2020_AddHistory.csv";
int nZ,nL,i=0;

int OnInit()
  {
   int fileHandle  = FileOpen(fName,FILE_READ|FILE_CSV|FILE_ANSI);    //create Handle
   if(fileHandle < 0)Print( "create Handle error: ",GetLastError());  //Error
  
   
   while(!FileIsEnding(fileHandle))          //bis zum ende des files
   {
    ArrayResize(line,i+1);                  //Vergrößere das Array nach jedem Durchlauf um 1
    fileString = FileReadString(fileHandle,(int)FileSize(fileHandle)); // lese ganze Datei
    line[i] = fileString;           //Zeile an der stelle i mit dem filestrign befüllen
    i++; 
   }
   
   FileClose(fileHandle);
   
   Print(line[4]," ",i);                  // zeile an der Stelle 4 und die Zählergröße i
   
   
 return(INIT_SUCCEEDED);
   
  }
SQL und MQL5: Mit der SQLite Datenbank arbeiten
SQL und MQL5: Mit der SQLite Datenbank arbeiten
  • www.mql5.com
Dieser Beitrag richtet sich an Entwickler, die in ihren Projekten gerne SQL verwenden möchten. Er erklärt die Funktionsweise und Vorteile von SQLite. Für diesen Beitrag sind keine speziellen Kenntnisse der SQLite-Funktionen nötig, doch ein Grundverständnis von SQL wäre durchaus hilfreich.
 
Das abnormal termination macht meiner auch zeitweise, lösung unbekannt
 
Die FileReadString() liest jeweils nur eine Zeile aus. Musste sie daher in eine while Schleife packen, damit sie mir alle Zeilen liest.

Du verwendest nicht die Option FILE_BIN, dann ...

Ich habe die abn. Termination noch nie gehabt - mit meiner Lösung




 
Carl Schreiber:

Du verwendest nicht die Option FILE_BIN, dann ...

Ich habe die abn. Termination noch nie gehabt - mit meiner Lösung




habs damit versucht, auch wenn ich dachte, dass man für ein.csv file auch FILE_CSV nehmen muss.

Es funktioniert teilweise. wenn ich aber eine Zeile > 200 auswähle, sagt er, dass das array out of range sei. Programmieren ist wirklich die Größte HErausforderung meines Lebens. Danke, dass ihr mir alle beisteht!

@Dominik Egert

Hast du das Wissen über die Datenbankprogrammierung von hier?
https://www.mql5.com/de/articles/862

https://www.mql5.com/de/articles/7463

SQL und MQL5: Mit der SQLite Datenbank arbeiten
SQL und MQL5: Mit der SQLite Datenbank arbeiten
  • www.mql5.com
Dieser Beitrag richtet sich an Entwickler, die in ihren Projekten gerne SQL verwenden möchten. Er erklärt die Funktionsweise und Vorteile von SQLite. Für diesen Beitrag sind keine speziellen Kenntnisse der SQLite-Funktionen nötig, doch ein Grundverständnis von SQL wäre durchaus hilfreich.
 
Claudius Marius Walter:

habs damit versucht, auch wenn ich dachte, dass man für ein.csv file auch FILE_CSV nehmen muss.

Es funktioniert teilweise. wenn ich aber eine Zeile > 200 auswähle, sagt er, dass das array out of range sei. Programmieren ist wirklich die Größte HErausforderung meines Lebens. Danke, dass ihr mir alle beisteht!

Wenn Du nicht einmal die Dok. über die verwendeten Funktionen liest, die, so wie Du sie verwendest, nicht funktionieren, machst Du Dir das Leben extra und unnötig schwer.

 
Claudius Marius Walter:

habs damit versucht, auch wenn ich dachte, dass man für ein.csv file auch FILE_CSV nehmen muss.

Es funktioniert teilweise. wenn ich aber eine Zeile > 200 auswähle, sagt er, dass das array out of range sei. Programmieren ist wirklich die Größte HErausforderung meines Lebens. Danke, dass ihr mir alle beisteht!

@Dominik Egert

Hast du das Wissen über die Datenbankprogrammierung von hier?
https://www.mql5.com/de/articles/862

https://www.mql5.com/de/articles/7463

Weder noch, ehrlich gesagt arbeite ich schon sehr lange mit MySQL und habe das Wissen daher und aus PHP-Projekten.

Meine Empfehlung geht in die Richtung dieses Artikels, den du genannt hast.

https://www.mql5.com/de/articles/7463


Die Dokumentation ist eine Standard-Pflicht-Lektüre, ich empfehle diese auf Englisch zu lesen.

Auch Fehlerhandhabung muss ein Grundsatz sein, besonders wenn du anfängst zu lernen.

Generell gilt auch sich Beispielcode zu suchen, in der CodeBase und diese zu lesen. Es ist viel Zeitaufwand, besonders am Anfang. Lohnt aber in jedem Fall.

Für SQL kann ich die MySQL Dokumentation empfehlen.


Warum deine Schleife so langsam ist, kann mit dem Dritten Parameter von ArrayResize zusammenhängen. -Lies mal nach, was der macht.

3 Minuten sind ein Zeichen für einen Fehler. 

Sporadische Fehler sind ein Zeichen einer fehlerhaften Herangehensweise, können aber auch andere Ursachen haben. Generell solltest du immer davon ausgehen, dass der Fehler vor dem Gerät sitzt. - Selten ist das Gerät schuld.

SQLite: Natives Arbeiten mit SQL-Datenbanken in MQL5
SQLite: Natives Arbeiten mit SQL-Datenbanken in MQL5
  • www.mql5.com
Die Entwicklung von Handelsstrategien ist mit dem Umgang mit großen Datenmengen verbunden. Jetzt können Sie mit Datenbanken mit SQL-Abfragen auf der Basis von SQLite direkt in MQL5 arbeiten. Ein wichtiges Merkmal dieser Engine ist, dass die gesamte Datenbank in einer einzigen Datei auf dem PC des Benutzers abgelegt wird.
 

Hi,

ich würde dir ebenfalls den Einsatz einer SQL-Datenbank (z.B. MySQL) empfehlen - ist zwar etwas mehr Aufwand, aber
die anderen Ansätze bringen dich bei großen Datenmengen nicht wirklich weiter.


Viele Grüße
 

Okay, Neustart. Danke für deinen Hinweis, Carl. Werde mir den Tipp merh zu Herzen nehmen.

Mittlerweile ist es mir gelungen, Daten aus einer .sqlite Datei abzufragen. Nun wollte ich ein .csv File in den Mt5 einlesen.

Mienes wissens müsste ich über:



und dem sich öffnenden Fenster,


das .csv file importieren können. Der Mt5 spuckt mir allerdings folgenden Fehler aus:



Habt ihr einen Schimmer, woran das liegen könnte?

 
Das oben beschriebene Problem ist gelöst, den Fehler kann ich leider nicht benennen..