C Zeilenweises Parsen einer Datei

Rugosh

Grünschnabel
Hallo,

ich habe da ein Problem beim Zeilenweisen Parsen einer Datei.
Die Datei wird zwar Zeilenweise eingelesen aber das Parsen nach dem Trennzeichen ";" funktioniert nicht :-(
Code:
    datei = fopen("./user/userdata.txt", "r");
    while((fscanf(datei,"%s\n",line)) != EOF ) {
        struct user u;
        sscanf(line, "%s[^;]%s[^;]%s[^;]%s[^;]%s[^;]%s[^;]%s[^;]%s", u.username, u.password, u.firstname, u.lastname, u.street, u.houseNumber, u.plz, u.city );
        printf("[Found] 1: %s\n",u.username);
		printf("[Found] 2: %s\n",u.password);
		printf("[Found] 3: %s\n",u.firstname);
		printf("[Found] 4: %s\n",u.lastname);
		printf("[Found] 5: %s\n",u.street);
		printf("[Found] 6: %s\n",u.houseNumber);
		printf("[Found] 7: %s\n",u.plz);
		printf("[Found] 8: %s\n",u.city);
    }
    close(datei);

Ich hoffe das mir hier jemand weiterhelfen kann und deshalb schon mal im voraus vielen Dank!

Mfg
Rugosh

EDIT: Eine Zeile ist sieht wie folgt aus:
Code:
user;pw;Vorname;Nachname;Strasse;Hausnummer;PLZ;Ort
 
Hi.

Zeilenweise kann man mit fgets einlesen.

Dein Formatstring ist falsch. Theoretisch müßte deine Eingabe so aussehen "user[^;]pw[^;].." usw.

Entweder du verwendest %s oder du verwendest %[...] -- in Kombination gibt es das nicht.

Außerdem solltest du prüfen ob denn auch etwas eingelesen wurde.

\edit: Außerdem funktioniert dein Ansatz nicht wenn die Stadt Leerzeichen (Bad Kreuznach etc.) enthält.
C:
if (sscanf(line, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^\n]", 
    u.username, 
    u.password, 
    u.firstname, 
    u.lastname, 
    u.street, 
    u.houseNumber, 
    u.plz,
    u.city ) == 8)
{
  // 
} else {
  // falsches Format 
}

Gruß
 
Zuletzt bearbeitet:
Vielen Dank für deine Hilfe, so wie du es geschrieben hast funktioniert das jetzt erst mal super.
Den Fall mit Leerzeichen getrennten Eingaben werde ich jetzt erst mal außer acht lassen und auf die Art Tricksen BadKreuznach oder Bad_Kreuznach :-), wobei ich zum zweiten tendiere da man das ja wieder hin und her parsen kann.
Ich mache dann das Thema zu.
 
Ich empfehle dir, die eingegebene Zeile zuerst mit strtok in die einzelnen Bestandteile zu zerlegen, die du dann auswertest. So vermeidest du eventuelle Fehlerquellen wegen seltsamer Eingabeformate.
 
Zurück