sscanf - Fehler
-
Hallo,
ich lese aus einer Datei folgende Zeile00002 , S , Störmeldung (Zentrale) , 1 , 2 , 3 , 4
diese Zeile möchte ich mit den Befehl sscanf (ist ja ähnlich fscanf) zerlegen.
struct char stoernummer[6]; char zeit_datum[20]; char typ[2]; char stoertext[256]; int sms; int reserve_1; int reserve_2; int reserve_3; sscanf(pzeile, "%d , %c , %[^,]c , %i , %i , %i ,%i" , &i , stoerzeile[anzahl_stoerung - 1].typ , stoerzeile[anzahl_stoerung - 1].stoertext , &stoerzeile[anzahl_stoerung - 1].sms , &stoerzeile[anzahl_stoerung - 1].reserve_1 , &stoerzeile[anzahl_stoerung - 1].reserve_2 , &stoerzeile[anzahl_stoerung - 1].reserve_3);
in der Variable pzeile steht die Zeile wie oben angegeben.
Alles funktioniert bis zum ".stoertext".
Die Variable "sms/reserve1-3" wird immer mit 0 gefüllt.
Ich kann dies überhaupt nicht verstehen.
Es muss funktionieren (wenn es denn will)Bin mit meinem bißchen Grips am Ende...es kommt ja auch keine Fehlermeldung beim Compilieren.
Danke
worst_casePS: Ich habe es mit %s auch schon probiert...kein Erfolg
-
du hast beim struct die klammern vergessen
ein beliebter fehler
struct zeile // die klammern und die struktur bezeichnung nicht vergessen { char stoernummer[6]; char zeit_datum[20]; char typ[2]; char stoertext[256]; int sms; int reserve_1; int reserve_2; int reserve_3; }; // und natürlich danach den strichpunkt (es sollte nun funktionieren) sscanf(pzeile, "%d , %c , %[^,]c , %i , %i , %i ,%i" , &i , stoerzeile[anzahl_stoerung - 1].typ , stoerzeile[anzahl_stoerung - 1].stoertext , &stoerzeile[anzahl_stoerung - 1].sms , &stoerzeile[anzahl_stoerung - 1].reserve_1 , &stoerzeile[anzahl_stoerung - 1].reserve_2 , &stoerzeile[anzahl_stoerung - 1].reserve_3);
-
Hallo,
danke für den Tip, aber bei mir sieht es so aus, sorry für falsche Angabe.
typedef struct { char stoernummer[6]; char zeit_datum[20]; char typ[2]; char stoertext[256]; int sms; int reserve_1; int reserve_2; int reserve_3; } stoerung;
Übrigens, wenn ich die Klammer vergessen hätte, dann könnte ich es, so glaube ich, nicht compilieren.
Wie oben schon erwähnt geht das sscanf bis zum "stoertext" nur danach wird nicht's mehr eingelesen.Aber vielen Dank.
worst_case
-
bin mir nicht ganz sicher. denke so könnte es gehen
sscanf(pzeile, "%d , %s , %[^','] , %i , %i , %i ,%i" , &i , &stoerzeile[anzahl_stoerung - 1].typ , &stoerzeile[anzahl_stoerung - 1].stoertext , &stoerzeile[anzahl_stoerung - 1].sms , &stoerzeile[anzahl_stoerung - 1].reserve_1 , &stoerzeile[anzahl_stoerung - 1].reserve_2 , &stoerzeile[anzahl_stoerung - 1].reserve_3);
-
Heureka....es geht.
sscanf(pzeile, "%d , %s , %[^','] , %i , %i , %i ,%i" , &i , stoerzeile[anzahl_stoerung - 1].typ , stoerzeile[anzahl_stoerung - 1].stoertext , &stoerzeile[anzahl_stoerung - 1].sms , &stoerzeile[anzahl_stoerung - 1].reserve_1 , &stoerzeile[anzahl_stoerung - 1].reserve_2 , &stoerzeile[anzahl_stoerung - 1].reserve_3);
Parameter 1 (typ) und 2 (stoertext) werden so übergeben.
Aber sonst, es geeeeeeeeht.Es lag am 2 Formatstring "%[^',']" was ja bedeutet: lese alles bis "Komma" ein, oder ?
Danke
worst_case
-
worst_case schrieb:
Es lag am 2 Formatstring "%[^',']" was ja bedeutet: lese alles bis "Komma" ein, oder ?
soweit ich weis schon