ich versteh nicht so ganz, was du genau machen willst?
ich versteh nicht so ganz, was du genau machen willst?
Na er will ein csv file einlesen 😊
@Claudius Marius Walter schau dir das mal an
Ich würde eine Struktur definieren und dann davon einen Array:
struct _datas { datetime d1,d1; double v1,v2; ... }; _datas d[];
Eventuell kann man die Datei lesen mit FileReadStruct(), ansonsten mit FileLoad().
Dann den Array d[] sortieren, um mit einer binären Suche (auch zu programmieren, ist ja kein Array) im Array etwas zu finden.
Oder man schiebt alles in eine SQL-Datenbank.
- www.mql5.com
ich versteh nicht so ganz, was du genau machen willst?
Ich würde eine Struktur definieren und dann davon einen Array:
Eventuell kann man die Datei lesen mit FileReadStruct(), ansonsten mit FileLoad().
Dann den Array d[] sortieren, um mit einer binären Suche (auch zu programmieren, ist ja kein Array) im Array etwas zu finden.
Oder man schiebt alles in eine SQL-Datenbank.
Danke Carl,
ich versuche die Lösung ohne SQL_Datenbank zu anzugehen. Klassen oder Strukturen sind noch ziemliches Neuland, weshalb ich an folgender kleinigkeit hängen bleibe:
Als ich das d[] array mir ArraySort() sortieren wollte, kam die Fehlermeldung:
Außerdem verstehe ich in der F1 Hilfe nicht, warum das Array genau sortiert wird. Es soll "aufsteigend in der 1. Dimension sortiert werden". Bedeutet dies, dass es vorher absteigend Sortiert war?
Hier mein Programmcode:
struct _datas { datetime date; double qouteVolume; int trades; double takerBuyVolume; double takerBuyquoteVolume; }; _datas fileBuffer[]; //bildet ein Array aus der Struktur _datas int OnInit() { int default_size=100; ArrayResize(fileBuffer,default_size); ResetLastError(); int fileHandle = FileOpen(fileName,FILE_TXT|FILE_WRITE|FILE_READ,","); if(fileHandle != INVALID_HANDLE) { while(!FileIsEnding(fileHandle)) { FileReadStruct(fileHandle,fileBuffer[size]); size++; } if(size==default_size) { default_size+=100; //--- erhöhen die Dimensionalität des Arrays ArrayResize(fileBuffer,default_size); } } else //Fehlermeldung { Print("File Handle create error: ", GetLastError()); return(INIT_FAILED); } ArraySort(fileBuffer); //Array sortieren return(INIT_SUCCEEDED); }
Ein struct kann nicht durch ArraySort sortiert werden, nur mehrdim. Array, das müsste man selbst programmieren.
Ich weiß nicht, welches interne Datenformat eine Datei haben muss, damit FileReadStrruct() funktioniert. Schreib mal eine Datei und versuch sie mit einem normalen Editor zu lesen, ich vermute das geht nicht.
Kennst Du das Beispiel für FileLoad(): struct schreiben und lesen.
- www.mql5.com
Grundsätzlich möchte ich das oben beschriebene File auslesen. Es beinhaltet zusätzliche Kursdaten. Diese Kursdaten möchte ich dann als Zusatzinformation mit in den EA einbetten. Beispielsweise gibt die "Number of Trades" nützliche Informationen über die Marktteilnehmer. Genauso wie das "Taker buy asset volume" einem sagt, wie groß das volumen der Käufer ist.
Danke Carl,
ich versuche die Lösung ohne SQL_Datenbank zu anzugehen. Klassen oder Strukturen sind noch ziemliches Neuland, weshalb ich an folgender kleinigkeit hängen bleibe:
Als ich das d[] array mir ArraySort() sortieren wollte, kam die Fehlermeldung:
Außerdem verstehe ich in der F1 Hilfe nicht, warum das Array genau sortiert wird. Es soll "aufsteigend in der 1. Dimension sortiert werden". Bedeutet dies, dass es vorher absteigend Sortiert war?
Hier mein Programmcode:
Warum nimmst du nicht die fertige Bibliothek?
- www.mql5.com
Bei deinem Beispiel stieß ich dafür auf Hyroglyphen (siehe kommentarzeilen)...
Finde es besonders schwer solche Begriffe zu emtschlüsseön, da sie nicht in der Hilfe erwähnt werden.
int CCsvReader::Open(const string file_name, const int open_flags, ushort delimeter='\t') { m_seperator=delimeter; // As we we use CFileTxt and want to read a whole line // we have to change the supplied open_flags, // because the user of this class may not expect this. int t_openflags=open_flags; // Remove attributs not supported or not wanted t_openflags &= (~0) ^ FILE_ANSI; // was bedeutet &= (~0) ^ ???? t_openflags &= (~0) ^ FILE_CSV; t_openflags &= (~0) ^ FILE_WRITE; t_openflags &= (~0) ^ FILE_REWRITE; // Add attributs wanted t_openflags |=FILE_UNICODE; // was bedeutet |= ???? t_openflags |=FILE_TXT; t_openflags |=FILE_READ; t_openflags |=FILE_SHARE_READ; return CFile::Open(file_name,t_openflags); }
Auch in der Funktion sind zeichen, die ich so nie gesehen habe:
PrintFormat("%s %s lot %f price %f" ); //%s %s lot %f price %f was ist das :D ?
PrintFormat("%s %s lot %f price %f" ); //%s %s lot %f price %f was ist das :D ?
Steht alles in der Doku.. Im Editor den Textkursor auf PrintFormat stellen und F1 drücken. Ist alles erklärt und Beispiele gibt es auch noch.
Wenn Du Dinge wie ~ und/oder ^ nachscheuen willst, auch die Doku (F1) => Inhalt => Grundlagen => Operationen und Ausdrücke. (Bei anderen Ausdrücken halt durch alle Kapitel mal durchklicken.
~ ist eine Operation direkt der Bits. Es geht da ja um Flags, also einfache JA-Nein-Schalter, ein Bit jeweils reicht da ja aus. Ich muss das jetzt nicht haben, aber wenn es funktioniert, nehme ich das halt quasi als Black Box.
Das Lesen einer cvs-Datei mach ich so, weil es am wenigsten Code-Zeilen benötigt:
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 */
Ist halt wenig Code, leicht zu lesen und zu verstehen - aber es ist alles rückwärts.
Übrigens, wenn ich eine Funktion suche, deren Name mir gerade nicht einfällt, verwende ich das hier: https://www.mql5.com/de/docs/function_indices.
Da kann man ein bisschen nach Schlüsselwörtern suchen.
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo Zusammen,
kennt sich jemand mit dem lesen von files aus?
ich habe eine .csv Datei in foglendem Format:
Die Datei ist ziemlich groß und nun möchte ich sozusagen jeder M1 Kerze diese Daten übergeben.
mit dem Befehl FileReadString() könnte ich durch eine while schleife jedesmal nach dem Datum suchen und dann die Daten an eine Variable übergeben. Mir scheint das allerdings sehr umständlich und ineffektiv zu sein. Kann mir jemand eine grobe Herangehensweise schildern? Ich tappe hier nämlich völlig im Dunkeln...