sscanf - Fehler



  • Hallo,
    ich lese aus einer Datei folgende Zeile

    00002 , 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_case

    PS: 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 😃


Anmelden zum Antworten