[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.


Log in to reply