Wie kann ich aus einer textdatei *.txt einzelne wörter auslesen?



  • ups, sry



  • bsP

    #include <stdio.h>
    
    #define MAX_LEN 4096
    
    int main(int argc, char** argv)
    {
    
            FILE* file1,*file2;
            char line[MAX_LEN], newline[MAX_LEN];
    
            if (argc==1)
            {
                    fprintf(stderr, "usage: %s filename newfilename\n", argv[0]);
                    return 1;
            }
    
            if (NULL==(file1 = fopen(argv[1], "r")))
            {
                    fprintf(stderr, "cannot open %s. Access denied or file not found\n", argv[1]);
                    return 1;
            }
    
            while(fgets(line, MAX_LEN, file1))
            {
                    printf(line);
            }
    
            fclose(file1);
    
            return 0;
    }
    


  • merci



  • Zwei Hinweise:

    supertux schrieb:

    fprintf(stderr, "cannot open %s. Access denied or file not found\n", argv[1]);
    
    perror(argv[1]);
    
    printf(line);
    

    Nicht gut!

    puts(line);
    // oder
    printf("%s", line);
    


  • DrGreenthumb schrieb:

    Zwei Hinweise:

    printf(line);
    

    Nicht gut!

    Und was ist das Problem damit?



  • In der Datei könnten Format-Anweisungen stehen (also %s o.ä.) und printf würde irgendeinen Schrott ausgeben. Oder das Programm stürzt gleich ab.



  • DrGreenthumb schrieb:

    In der Datei könnten Format-Anweisungen stehen (also %s o.ä.) und printf würde irgendeinen Schrott ausgeben. Oder das Programm stürzt gleich ab.

    stimmt, hab nicht dran gedacht



  • ... uuuund "puts()" hat noch den Vorteil, dass es am Ende einen Zeilenumbruch ausgibt. 🙂



  • hallo villeicht kann mir ja jemand helfen
    habe eine Textdatei die so aussieht :

    TEILENR KUNDE          TEILENR                  ME     BEZEICHNUNG
    55866A547X5            12354                    ST     ABGASANLAGE.
    

    die bezeichnungen bzw oberen felder ändern sich nicht und brauche ich auch nicht. Da sich nur die unteren werte jeweils ändern....wie muß die schleife aussehen, damit ich nur die zweite zeile getrennt mit ";" ??
    mit fgets in den puffer aber dann ???? da fehlt mir doch etwas der Ansatz...

    hier der code :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /*-----------globale variablen------------*/
    FILE *datei_in; /*FILE pointer für input-datei*/
    FILE *datei_out;/*FILE pointer für output-datei*/
    FILE *count_p;
    char name_in[]="quell.txt";
    char name_out[]="ziel.txt";
    char daten[80];
    int count=0;
    
    //----------------Hauptprog-------------------------
    int main()
    {
    /* Datei quell.txt zum lesen öffnen,gleichzeitig ziel.txt erstellen */
    datei_in= fopen (name_in,"r");
    datei_out= fopen (name_out,"w");
        if ((datei_in),(datei_out)==NULL)
            printf(" Fehler beim öffnen der Datei %s \n ",name_in,name_out);
        else printf ("Dateien %s und %s geoeffnet\n",name_in,name_out);
    
    //------------datei zeilenweise lesen-----------------
    do
    {
    fgets (daten,sizeof(daten),datei_in);
    //------------schleife auslesen des Puffers und einfügen eines ";"--------
    if (daten=='\0')
    
    ?????????????????
    ???????????
    
    count+=strlen(daten);
    fputs(daten,datei_out);
    }
    while (!feof(datei_in));
    
    printf ("Anzahl der zeichen in \"%s\" : %d\n" ,name_in,count);
    fprintf (datei_out, "Anzahl zeichen in \"%s\" : %d\n" ,name_in,count);
    
    //------------Dateien schließen---------
    fclose (datei_in),(datei_out);
    system ("Pause");
    return 0;
    }
    


  • Mal zur Klarstellung was du genau willst:

    Du hast also eine Datei, in der ein Satz folgendermaßen aussieht (inclusive den Leerzeichen?):

    55866A547X5            12354                    ST     ABGASANLAGE.
    

    Und in deinem Programm soll das dann so aussehen?

    55866A547X5;12354;ST;ABGASANLAGE.
    

    Sonstige Fragen:
    Kann in der Bezeichnung eigentlich auch ein Leerzeichen enthalten sein? Sind die Datensätze immer gleich lang?

    Übrigens:

    system("Pause")

    -> http://www.c-plusplus.net/forum/viewtopic.php?t=81712



  • Hallo AJ,

    erstmal vielen dank das du mit meinem Probl. befassen tust...

    ja so ungefähr solls aussehen:

    55866A547X5;12354;ST;ABGASANLAGE.
    

    ja die teilenr (55866A547X5) ist max 13(+1 zeichen für '\0') zeichen lang, danach kommt noch ein 4 stelliger code (zb: "a234")

    diese Zeile mit der bezeichnung..usw ist immer gleich groß, und die 55866A547X5 hat keine Leerzeichen , ist also ein block!

    leider folgt schon in der nächsten Zeile ein ganz anderer Suchstring ....
    zb

    Lieferschein   letzte bestellung
                  5114        5 vom 5.6.04
    

    ich hab die textdatei..wenn du sie sehen willst ....mail ich sie dir.

    das ist verflixt nochmal nicht einfach....

    trotzdem vielen dank erstmal.



  • Hallo,

    leider muß ich bei meiner List einen ganz anderen Ansatz wählen,da es zu unterschiedlich daten gibt.

    werde Random dateizugriff (fseek,fread,fwrite ) benutzen, und diese dann in Struct ablegen....ohh jee das ist umständlich aber die Liste ist halt wie ne Maske aufgebaut.

    😞


Anmelden zum Antworten