Textdatei zeilenweise auslesen, bitte HILFE!



  • Hallo, hoffe ihr könnt mir da helfen.Habe in der Berufsschule die Aufgabe bekommen ein Videoverwaltungsprog zu schreiben das Filme in einer Datenbank (Textdatei) einliest und wieder ausliest. Das ist so weit auch gar nicht das Problem, nur wenn der Benutzer einen bestimmten Titel suchen möchte, müsste das Programm ja meine Textdatei zeilenweise auslesen können. Und da weiss ich nicht weiter.
    Es wäre echt nett wenn mir einer veraten könnte wie man die Textdatei zeilenweise auslesen kann, ohne mir jetzt nur irgendwelche Begriffe an den Kopf zu werfen.
    Wär euch da echt dankbar, Leute.

    Lighti 😞





  • http://www.cppreference.com/

    möcht ich noch erwähnt haben 🙂



  • Echt super von euch, endlich komme ich weiter. Hab mich gerade durch den Code gewuselt.
    Nur ein Problem hab ich jetzt noch.Die Funktion liest nur die erste Zeile aus, wie kann ich die zweite oder dritte auslesen?
    Ich brauch das nämlich, sonst kann ich in meiner "Suchfunktion" später nicht die ganze Textdatei auslesen.
    Und eine kleine Frage noch? Wie lösch ich eine Zeile? Glaube da gabs ne Funktion delete; aber ich finde nichts dazu im Netz.



  • DU kannst das auslesen mit ner while machen, und zwar while(!feof(Zeiger))
    wobei Zeiger für deinen FILE Zeiger steht.
    In das while kannst dann das fgets machn, es ist so, dass der nach jedem fgets automatisch ne Zeile weiter geht.



  • Hm...irgendwie funzt dit nicht.Wie soll denn das aussehen? Bisher sieht das so aus:

    int suchen( void )
    {
    /*char search;
    cout<<"\nFilmtitel: "
    cin>>search; */

    FILE *stream;
    char line[100];

    if( (stream = fopen( "vdb.dat", "r" )) != NULL )
    {
    if( fgets( line, 100, stream ) == NULL)
    cout<<"Error";
    else
    cout<<line;

    fclose( stream );
    }
    }

    Hab da ein wenig Probleme, weil ich durch den oberen Code schon nicht richtig durchsehe.Hab den auch nur kopiert und angepasst.Ich will doch nur aus meiner "vdb.dat" (Textdatei) einzelne Wörter suchen können.Oder bin ich da jetzt mit meiner Überlegung völlig verkehrt? 😕



  • Argh, C++, schreib deinen Code nochma ins C++ Forum und nicht hierher, hier is nur C, Ansi C, kein C++.

    kannst ja nen Verweis hierher machn, damit die glei das Problem kennen.



  • Na super, ich lerne gerade C und das ist auch kein C++.Ich schreib auf ner billigen Konsole und bin fast fertig.Hab auch keine Lust das selbe Problem woander hinzuposten



  • // open testfile for reading and writing(see: man fopen)
     if((fd = fopen(testfile, "r+")) == NULL)  {
    
          fprintf(stderr,"Cant open file %s, %s\n",
             testfile,strerror(errno));
          exit(-1);
       }
    
     while(fgets(lbuf, BUFSIZE, fd) != NULL) {
    
          position = ftell(fd); // actual fileposition for fseek()
          if((p = strstr(lbuf,"Rambo III")) != NULL) {
    
            fprintf(stderr,"Weel, found "Rambo III on pos %ld\n",position);
    
          }
     }
    

    Nun, wenn du in einem File sinnvoll suchen möchtest solltest du die Daten sortiert ablegen. Das macht's schnell aber auch kompliziert, weil du bei einem update das file neu organisiert schreiben musst. Es würde natürlich auch über einen Indexfile gehen mit B-Tree im memory... Aber du willst ja keine datenbank nachschreiben oder?
    Beim Löschen wirds schwierig: Eine Möglichkeit ist am begin der Zeile z.B. ein \n oder '#' mit fwrite zu schreiben. Damit hast du zwar die Zeile nicht gelöscht aber zumindest schnell als obsolate markiert. beim Auslesen überspringst du einfach solche Zeilen. Ansonsten bleibt dir nach einem solchem Markieren von Zeilen nur das neu schreiben der Files ohne diese Zeilen ( dauert lange ).

    Karschie



  • Ok danke, ihr seid echt die Besten, irgendwie bekomm ich das so nicht hin.
    Aber ihr habt euch echt Mühe gegeben.Danke Leute.



  • 😃 Aufgeben gilt nicht!
    C ist scheiss schwer am Anfang ( und geht mir auch immer noch manchmal so.. ). Es ist schon spät.. Aber wo liegt denn nun genau das problem?? Wie möchtest du denn die Daten überhaupt ablegen?
    Rambo III;Schrank 2; Board 5; Cassete 42(why not!); Lenght 142Min; Position 0

    Oder anders? oder was?

    Kopf Hoch! :p

    Karschie


Anmelden zum Antworten