Er ließt also nur bis zum begrenzer (delimiter in diesem Fall ein ",").
Um die ganze zeile (bestehend aus 4 werten) zu lesen, muss ich FileReadNumber(Filehandle) also 4 mal aufrufen? (und nur die werte die ich brauche rauspicken?
etwa nach dem schema ?:
Das file read und write ist bei mql eine eigene sache, aber du liest immer nur wert eins
Wenn ich ein csv-Datei lesen will, gehe ich so vor:
- Ich lese die Datei ganz ein ganz ein: zB:
int nL,i,sz,hdl = FileOpen(fNameMag,FILE_READ|FILE_BIN|FILE_COMMON); sz = (int)FileSize(hdl); string lines[],cell[],all = FileReadString(hdl,sz); // read file totally
- Dann splitte ich all in die Zeilen:
ushort SepLine = StringGetCharacter("\n",0), SepItem = StringGetCharacter(";",0); nL = i = StringSplit(all,SepLine,lines); // split file in lines
- Dann splitte ich die Zeilen in Zellen:
while(i-->0) { nC = StringSplit(lines[i],SepItem,cell); ... while(nC-->0) { int n = (int)StringToInteger(cell[nC]); } }
Wenn ich ein csv-Datei lesen will, gehe ich so vor:
- Ich lese die Datei ganz ein ganz ein: zB:
- Dann splitte ich all in die Zeilen:
- Dann splitte ich die Zeilen in Zellen:
1.was befindet sich in den beiden stringarrays lines[],cell[] und dem string all ? (anscheinend alle daten, aber wie?) alles ein durchgehender string?
2. das zweite verstehe ich: wir splitten alles in Zeilen durch den Zeilenseperator SepLine und in lines[] ist die jeweilige zeile als ein string und erhalten die anzahl an substrings, aber warum setzt du nL = i?
3. die whileschleifen sind pseudocode und gleichzusetzen mit for(int substring =i; substring>0;substring--) und for(int cell =nC;cell>0;cell--) stimmts? oder funktioniert diese syntax wirklich so? (wenn das stimmt splitten wir im ersten Loop den Zeilenstring in seine Zellen und transferiere im zweiten Loop diese jeweiligen Zellen zurück in den typ den wir haben wollen).
okay... habs verstanden, danke dir für das Beispiel :)
Das ganze können wir dann in eine Matrix einsetzen mit den gleichen loopiterationen -> so z.B.
//(vor dem loop deklariert) int matrix[][nC]; ArrayResize(matrix, i); while(i-->0) { nC = StringSplit(lines[i],SepItem,cell); ... while(nC-->0) { int n = (int)StringToInteger(cell[nC]); matrix[i][nc] =n; } }
müsste so stimmen.
add 1: all ist ein string mit allem, lines[] kriegt alle Zeilen und cell[] alle Zellen einer Zeile, die Reihenfolge ist die der Datei.
add 2: i wird (ohne ein break) auf -1 runtergezählt, ich benötige aber uU. noch die ursprüngliche Anzahl der Zeilen
add 3: while funzt - lies es nach.
Da hat sich schon jemand Gedanken gemacht.

- 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.
"Liest aus der Datei des Typs CSV die Zeile von der laufenden Position bis zum Begrenzer (oder bis zum Ende der Textzeile) und wandelt die gelesene Zeile in den Wert des Typs double um."
Er ließt also nur bis zum begrenzer (delimiter in diesem Fall ein ",").
Um die ganze zeile (bestehend aus 4 werten) zu lesen, muss ich FileReadNumber(Filehandle) also 4 mal aufrufen? (und nur die werte die ich brauche rauspicken?
etwa nach dem schema ?: