[CSV] Datei einlesen
-
Salü
Folgende Aufgaben-Stellung:
Ich habe eine grosse CSV Datei die halb-gefüllt ist.
Ich habe eine kleine CSV Datei die komplett ausgefüllt ist.
Jedoch können auch Felder leer sein dazwischen.Ich möchte die kleine Einlesen, und jeden Wert in eine Variable speichern ( erstmal ) und dann in der grossen Tabelle gucken:
Ist in Zeile 1 die gleiche UserID wie in <EingeleseneUserID>
Wenn JA: Fülle die restlichen Felder in der grossen Datei auf, wo in der kleinen Datei eine "1" steht. ( Man konnte nur 1 oder nix reintun )Wenn NEIN: Gehe zur nächsten Zeile
Mein Problem ist das Einlesen bis jetzt..ich mach das so:
fscanf(pFile, "%d;%s;%s;%d", ID, Name, Vorname, &PLZ);
Dies funktioniert nicht. Ich kopiere hier eine Zeile aus der CSV Datei hin:
8242;Max Muster;Muster;Max;+111111111;Firma Name;Militärstrasse 7;PLZ;Schattdorf;CH;4000;<abgekürzt>107.00;1;1;1;1;1;1;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;;;;1;;;;;;;SFr. 0.00;;;;;;;;;;;;;;;;;;;;;;1;;;;;;;;;;;;;;;;1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SFr. 400.00;;;;;;;;;;;;;;;;;;;;;;;;;
Ihr seht, zuerst ein paar Daten mit INT und String und dann kommen die ;;;1;;;;;;1.
Kann mir wer helfen die korrekt auszulesen?
-
vermutlich muss das &ID heißen
-
Das habe ich bereits getan, danke. Mein Problem sind eher die Strings..
-
wie hast du Name, Vorname deklariert`? das & muss jedenfalls vor ID, also &ID
ausserdem solltest du ruhig "%d; %s; %s; %d" schreiben, wegen der string grenzen
-
Hab ich so probiert - dann kommt sowas raus
[/cpp]fscanf(pFile, "%d; %s; %s; %s", &PID,FullName,Nachname,Vorname);
printf("PID = %d\n", PID);
printf("FullName = %s\n", FullName);
printf("Nachname = %s\n", Nachname);
printf("Vorname = %s\n", Vorname);[cpp]PID = 8242
FullName = Gisler
Nachname = M¢¬w8┬ºw
Vorname =
-
man sollte den rückgabewert von fscanf prüfen.
http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/
wenn z.b. in deinem fall 4 elemente nicht erfolgreich eingelesen werden können,
dann kann auch nix vernünftiges ausgegeben werden.nochmal: wie hast du Name, Vorname deklariert`?
-
Ich habe es auch versucht... habe es nicht geschafft, %s lässt sich glaub nicht durch ; stoppen wie bei %d...
Ich würde mit fgets Zeile für Zeile einlesen und danach mit strchr die Semikolons suchen.
-
vermut0r schrieb:
man sollte den rückgabewert von fscanf prüfen.
http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/Schade nur, dass im Beispiel der Rückgabewert nicht verwendet wird.
-
Binggi schrieb:
%s lässt sich glaub nicht durch ; stoppen wie bei %d...
Bingo Binggi.
Funktionieren sollte:
if( 4==fscanf(pFile,"%d%[^;];%[^;];%[^;];",&PID,FullName,Nachname,Vorname)) )
-
Wutz schrieb:
vermut0r schrieb:
man sollte den rückgabewert von fscanf prüfen.
http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/Schade nur, dass im Beispiel der Rückgabewert nicht verwendet wird.
ja, das ist äußerst bedauerlich.
ein bisschen eigeninitiative ist wohl zuviel verlangt, heutzutage.