Lesen aus Datei und Trennen der Daten mit strtok



  • Hallo liebe Programmiergemeinde 😉

    Ich als Programmieranfänger habs scheinbar echt schwer 😞
    Denn eine weitere Frage hätte ich noch - wo ich nicht weiss woran es hapert...

    Meine Funktion lautet:

    for(i_file=0;i_file<24;i_file++){
        fgets(temp, sizeof(temp), stream_tournament1);
        token[0] = strtok(temp, ";");
        for(i=1;i<7;i++){
            token[i] = strtok(NULL, ";");
        }
        strcpy(teams.game[i_file].team1,token[0]);
        strcpy(teams.game[i_file].team2,token[1]);
        teams.game[i_file].tore1=atoi(token[2]);
        teams.game[i_file].tore2=atoi(token[3]);
        teams.game[i_file].team1_id=atoi(token[4]);
        teams.game[i_file].team2_id=atoi(token[5]);
        teams.game[i_file].played=atoi(token[6]);
    }
    

    Das struct game ist folgendermaßen aufgebaut:

    struct game {
        char team1[MAX];
        char team2[MAX];
        int tore1;
        int tore2;
        int team1_id;
        int team2_id;
        int played;
    };
    

    Die Datei die Eingelesen wird sieht folgendermaßen aus:

    Hippstedt;Eintracht;1;0;0;1;0
    Borussia;Berlin;1;0;2;3;0
    Hippstedt;Borussia;3;0;0;2;0
    Eintracht;Berlin;2;0;1;3;0
    Hippstedt;Berlin;3;0;0;3;0
    Eintracht;Borussia;3;0;1;2;0
    K”ln;Bayern;2;0;4;5;0
    Frankfurt;Bremen;5;0;6;7;0
    K”ln;Frankfurt;7;0;4;6;0
    Bayern;Bremen;6;0;5;7;0
    K”ln;Bremen;7;0;4;7;0
    Bayern;Frankfurt;7;0;5;6;0
    Wolfsburg;Sarstedt;6;0;8;9;0
    Braunschweig;Hannover;9;0;10;11;0
    Wolfsburg;Braunschweig;0;0;8;10;0
    Sarstedt;Hannover;0;0;9;11;0
    Wolfsburg;Hannover;0;8;8;11;0
    Sarstedt;Braunschweig;0;8;9;10;0
    Saarbrcken;Pauli;11;0;12;13;0
    Hamburg;Hoffenheim;11;8;14;15;0
    Saarbrcken;Hamburg;11;8;12;14;0
    Pauli;Hoffenheim;1;0;13;15;0
    Saarbrcken;Hoffenheim;1;0;12;15;0
    Pauli;Hamburg;13;0;13;14;0
    

    Und es scheitert an dem strcpy(teams.game[i_file].team2,token[1]); - Dort hängt sich das Programm auf und Windows sucht nach Problemlösung...

    Lasse ich das strcpy weg und setze einfach teams.game[i_file].team2=token[1]; dann meckert der Compiler "incompatible types when assigning to typ 'char[30]' from typ 'char *'

    Vielleicht wisst ihr wie ich das hinbekomme...



  • Nachtrag:

    Das Witzige ist...
    Es tritt erst in dem 2 Durchlauf der Hauptschleife auf und dann beim 2 strcpy...

    Und jetzt bin ich wirklich Ahnungslos 😞 Und bitte um eure professionelle Hilfe 😉

    P.S.: Hab mich auch endlich registriert damit ich meine Beiträge editieren kann 🙂



  • Tja, an dem was du bis jetzt gezeigt hast, liegt es nicht.

    Wie wäre es mit einem klitzekleinem Programm, das nur diese Leseroutine enthält (und den anderen Kram den du nicht gepostet hast, aber benötigt wird).

    Was ist temp, token, teams.game[i_file] ?



  • Danke für die Hilfe - hätte bis jetzt vermutlich mehr gepostet...

    Habe allerdings festgestellt das ich meine Datei wohl verändert hatte - die von der Funktion eingelesen wird. Dadurch war die Funktion nicht mehr fähig richtig zu funktionieren 😉

    Jetzt lüppt es! Danke aber trotzdem Dirk! 🙂



  • Das heißt aber auch, dass du deine Einlesefunktion gegen Fehleingaben absichern musst.
    (auf NULL-Zeiger prüfen, strtol statt atoi, Rückgabewert von fgets auswerten, ...)


Log in to reply