Daten einlesen mit fscanf (oder auch anders...)



  • Hallo, ich habe Daten in einem ASCII-File und möchte diese
    einlesen. Die Daten sehen wir folgt aus:

    10A11100888;10;01700021.0;RBG STRÛDER GMBH ;00000000000.00;000000007853.00;000000000000.00; (1 Zeile)

    Die Daten beinhalten natürlich sehr viele von solchen Zeilen und ich möchte die das Feld bis zum ersten ; in ein string-Array, entspr. die Zahl bis zum zweiten in ein int-Array einlesen usw. (double *; string *, double *, double *, double *).

    Bei meinen bisherigen Versuchen kam nur Müll raus
    (einlesen als fscanf( infile, "%c;%i;%f;%c;%f;%f;%f;\n", &akt_daten.anr[i], &akt_daten.vwg[i], &akt_daten.knr[i], &akt_daten.kunde[i], &akt_daten.ae[i], &akt_daten.ra[i], &akt_daten.ab[i] );).

    Hat jemand eine Idee, wie man so etwas bewerkstelligen könnte?

    Vielen Dank und viele Grüße
    Thomas



  • Einlesen:
    %s --> char_array
    %d --> Integer

    scanf liest aber nur bis zum ersten Leerzeichen ein. Besser ist es, du liest die komplette Zeile in den Speicher und wertest die Zeile dann aus. Schau dir dazu mal die Funktionen fgets() und strtok() an.



  • hallo,

    ich würde es so machen:

    char zeile[200+1];
    FILE *infile;
    infile = fopen("pfad", "r");
    double dein_double;
    char string_1[20+1];
    /* und noch weitere strings */
    
    while(fgets(zeile, infile))
    {
        dein_double = atof(strtok(zeile, ';')); //atof wandelt einen string in ein double um
        strcpy(string_1, strtok(strtok(zeile, ';'), ';'));
        dein_double2 = atof(strtok(strtok(strtok(zeile, ';'), ';'), ';'));
        dein_double3 = atof(strtok(strtok(strtok(strtok(zeile , ';'), ';'), ';'), ';'));
    // usw...
    }
    
    /* übersichtlicher und damit vielleicht auch besser wäre es vielleicht, wenn man sich eine variable für jedes ';' anlegt und darin die position im string speichert... ab dem 4. ';' wird es ja doch ein bissl unübersichtlich.
    */
    

    würdest du bitte deine fertige lösung hier mal posten?

    grüße,

    sternenstaub



  • Einen schönen guten Morgen,

    > würdest du bitte deine fertige lösung hier mal posten?

    Vielen Dank für die Antworten, sobald ich dazu komme, die Sache
    zu implementieren, poste ich auch die ferige Lösung hier.

    Viele Grüße
    Thomas


Anmelden zum Antworten