fscanf und |
-
Ich will aus einer Datei, mehrer Strings bzw. Integer auslesen. Jeder Wert ist Jeweils durch ein | getrennt. Leider kommt nie das richtige raus:
test.txt:Max|Mustermann|21|Männlich
So sieht mein Code aus:
FILE *Datei; Datei = fopen("test.txt" , "r"); int temp3; char temp1[100], temp2[100], temp4[100]; fscanf(Datei, "%[^|]%[^|]%d|%s", temp1, temp2, temp3, temp4); fclose(Datei);
Probleme gibt es immer an der fscanf-Zeile. Da weis ich net wie ich es schrieben soll:
fscanf(Datei, "%s|%s|%d|%s", temp1, temp2, temp3, temp4); fscanf(Datei, "%[^|]|%[^|]|%d|%s", temp1, temp2, temp3, temp4); fscanf(Datei, "%[^|]%[^|]%d|%s", temp1, temp2, temp3, temp4);
Wie muss ich die Zeile schreibe?
Und ameine 2. Frage, wenn ich viele Zeilen immer gleichaussehend habe, wie kann ich die dann hintereinader einlesen?
Ich freuhe mich auf jede Hilfe,
Stratege993
-
%[^|][b]|[/b]
-
FILE *Datei; Datei = fopen("test.txt" , "r"); int temp3; char temp1[100], temp2[100], temp4[100]; fscanf(Datei, "%99[^|]|%99[^|]|%d|%99s",temp1,temp2,&temp3,temp4); fclose(Datei);
Was allerdings noch fehlt, ist ne Prüfung, ob der Zahlenwert (das Alter) INT_MAX (aus limits.h) übersteigt. Evtl. bist du mit einer Stringzerlegung (-> strchr()) besser beraten.
Zur zweiten Frage: Schleife.
-
Hab es genau so gemacht, dann kommt der schöne Fehler:
Benachrichtigung über Debugger-Exception
Im Projekt Projekt1.exe ist ein Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffverletzung bei Adresse 326636F7 in Medul 'CC3260.DLL'. Schreiben von Adresse 00000000'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
[OK] [HILFE]Wenn ichs dann weiterlaufen lasse kommt:
Project1
Zugriffsverletzung bei Adresse 326636F7 in Medul 'CC3260.DLL'. Schreiben von Adresse 00000000.
[OK]Und es erscheint nichts. (in den Labels)
Ich arbeite mit dem Borlandbuilder, aber es ist ja eine C Funktion also hab ich mich für den Forenteil entschieden. Kann mir jemand sagen was ich falsch mache?Stratege993
-
Hast du auch den Adress-Operator bei temp3 nicht vergessen?
-
super, danke, es geht, ich hab den an das falsche temp gesetzt
Stratege