Zeilenweises Auslesen aus CSV-Datei (unbekannter Formatierung und Länge)
-
Verstehe mittlerweile auch nichts mehr.
Bin jetzt doch mehr verunsichtert als erleuchtet.Ich weiß jetzt leider auch nicht die richtigen Fragen zu stellen, um gute Antworten zu bekommen.
Ich werde das jetzt erst mal verdauen und werde später noch mal darauf zurück kommen.
-
Zeichenweise einlesen und überprüfen. Ggf. zu einem Buffer hinzufügen.
-
sega schrieb:
Ich weiß jetzt leider auch nicht die richtigen Fragen zu stellen, um gute Antworten zu bekommen.
Versuch doch erstmal, den Code für eine Zeile hinzubekommen.
-
Habe ich versucht, sieht so aus:
char *pch; char c[10000]; FILE *file; file = fopen("reacdat.csv", "r"); if(file==NULL) { Message0("Error: can't open file.\n"); } else { Message0("File opened successfully. Contents:\n\n"); while(fgets(c, 10000, file)!=NULL) { zeile++; Message0("String: %s", c); if(zeile == 18){ Message0("Zeile 18: \n"); pch = strtok(c, ";"); Message0("Erster Aufruf: %s\n",pch); while (pch != NULL){ Message0("Schleife\n"); i++; pch = strtok(c, ";"); Message0("%i: %s\n",i,pch); pch = strtok(NULL, ";"); } } }
Die Ausgabe der Tokens für Zeile 18
#1;FeS[s];#;#;#;#;#; ===>;Fe[s];0.5 S2[g];#;#;#;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
spuckt leider nur das erst Token aus:
1: #1
danach ist die while-Schleife auch schon zu Ende.
Habe mich dabei am Refernz-Beispiel für strtok orientiert.
http://www.cplusplus.com/reference/clibrary/cstring/strtok/Tja, wie muss das dann richtig sein?!
-
Die Funktion strtok ist hier nicht geeignet, darauf hat dich ja mngbd schon hingewiesen:
Denn wenn in der Zeile Zeichenketten mit Trennzeichen vorkomen, z.B. "on>=1;off=0", dann gibt es Datensalat.Hier wäre es angebracht, sich jedes Zeichen einzeln anzusehen und zu prüfen, was zu tun ist.
while ( ( c = fgetc(fp) ) != EOF ) { ...
Gruß,
B.B.
-
Ja ok. Und wie ich bereits erwähnt hatte, sind jetzt alle ; durch , ersetzt worden und dann wurde erst das CSV geschrieben.
Also im CSV sind nur noch ; vorhanden, wenn Sie auch als Trennzeichen gemeint sind.Somit würde ich gerne strtok() nutzen, denn ich habe das Gefühl das so halb verstanden zu haben. Zumindest bis zum ersten Token.
Darüber hinaus scheint ja was faul zu sein ...
-
sega schrieb:
Ja ok. Und wie ich bereits erwähnt hatte, sind jetzt alle ; durch , ersetzt worden und dann wurde erst das CSV geschrieben.
Also im CSV sind nur noch ; vorhanden, wenn Sie auch als Trennzeichen gemeint sind.Ok.
sega schrieb:
Darüber hinaus scheint ja was faul zu sein ...
Jepp. Deine Orientierung ist etwas schiefgelaufen, probier mal das:
int i = 0; char test[] = "wurst;brot;marmelade"; char* separator = ";", *pch = strtok( test, separator ); while ( pch != NULL ) { i++, printf ( "%i: %s\n", i, pch ); pch = strtok ( NULL, separator ); }
-
sega schrieb:
Ja ok. Und wie ich bereits erwähnt hatte, sind jetzt alle ; durch , ersetzt worden und dann wurde erst das CSV geschrieben.
Also im CSV sind nur noch ; vorhanden, wenn Sie auch als Trennzeichen gemeint sind.Ist das ein Witz? CSV steht für Comma Separated Values.
-
Janjan schrieb:
sega schrieb:
Ja ok. Und wie ich bereits erwähnt hatte, sind jetzt alle ; durch , ersetzt worden und dann wurde erst das CSV geschrieben.
Also im CSV sind nur noch ; vorhanden, wenn Sie auch als Trennzeichen gemeint sind.Ist das ein Witz? CSV steht für Comma Separated Values.
Nein. Aber da kann ich doch nix dafür, wenn jemand im Excel/OpenOffice innerhalb einer Zelle ein ; als Trennzeichen verwendet und das dann beim Konvertieren nach CSV trouble macht. Deshalb habe ich die ; die zum Eintrag gehören vor dem Konvertieren ausgetauscht.
-
Big Brother schrieb:
Deine Orientierung ist etwas schiefgelaufen
Jepp, funktioniert jetzt. Danke!