Bestimmte Zeile aus .txt lesen



  • Hallo Community,

    ich möchte gerne aus einer .txt datei, die aus mehreren Zeilen besteht (es sollen mal Zahlencodes werden) gezielte Zeilen ausgeben lassen. Mein bisheriger Code sieht so aus, gefunden habe ich ihn

    char data[80];		/* Record read from the file.		*/
      FILE *ptr;			/* Pointer to the file. FILE is a 
    				   structure  defined in <stdio.h>	*/
    
    				/* Open the file - no error checking done */
      ptr = fopen("text.txt","r");
    				/* Read one record at a time, checking 
    				   for the End of File. EOF is defined 
    				   in <stdio.h>  as -1 			*/
    
      while (feof(ptr) == 0)
      {
        fgets(data, 80, ptr);	/* Read next record			*/
        if (data[0] == '#') continue; /* filter out the comments		*/
        printf("%s",data);	/* O/P the record to the screen		*/
      }
    
      fclose(ptr);			/* Close the file.			*/
    

    gefunden hab ich diese zeilenausgabe über google. ich hab aber leider keine Ahnung wie ich dort eine gezielte ausgabe tätigen kann.
    Wäre echt toll wenn ihr mir helfen könntet.

    Gruß



  • Hast Du auch was selbst gemachtes, oder nur das, was Du Dir offensichtlich von hier kopiert hast? Wo hapert es denn mit dem Verständnis dessen, was Du Dir kopiert hast?



  • ich bin halt grad lernen, wie man mit externen dateien arbeitet. bzw. hab ich eben die aufgabe dazu bestimmte Zeilen aus einer .txt ausgeben zu lassen. und da google ich halt nach beispielcodes. meine eigene Sache brauch ich ja erst anfangen wenn mir klar ist wie ich in einer .txt datei bspw. nur die 2. Zeile ausgeben lasse.
    der pointer zeigt ja nur auf die adresse, also den dateipfad, und schiebt das was er findet in data[80] in dem fall.
    gibt es einen befehl in dem ich gezielt zeilen auslesen kann oder muss ich die gesamte txt datei in nen array laden und kann erst dort konkrete Entscheidungen treffen?



  • xoosksicskoox schrieb:

    gibt es einen befehl in dem ich gezielt zeilen auslesen kann oder muss ich die gesamte txt datei in nen array laden und kann erst dort konkrete Entscheidungen treffen?

    Für eine Antwort braucht es noch die Info, wovon es abhängt, ob eine Zeile ausgegeben werden soll oder nicht.



  • angenommen ich hab 10 zahlencodes in der txt-datei und ein user kriegt zahlencode nummer 4 (also 4. zeile) zugewiesen, dann möchte ich dass das programm nur die 4. zeile einliest und ausgibt. anders gesagt es soll die ersten drei zeilen ignorieren beim einlesen.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • 1. Willst du das mit C oder mit C++ machen?
    (Der Code oben ist C, aber du hast im C++ Unterforum gepostet.)

    2. fopen() öffnet eine Datei und liefert einen FILE* zurück, aus dem du dann lesen kannst. fgets() liest immer nur bis zur nächsten Zeile ein, wenn du also deinen Puffer groß genug machst gilt:
    Anzahl der fgets() Aufrufe = Aktuelle Zeile 😉



  • xoosksicskoox schrieb:

    angenommen ich hab 10 zahlencodes in der txt-datei und ein user kriegt zahlencode nummer 4 (also 4. zeile) zugewiesen, dann möchte ich dass das programm nur die 4. zeile einliest und ausgibt. anders gesagt es soll die ersten drei zeilen ignorieren beim einlesen.

    Also in C++ ginge das so:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <limits> // numeric_limits
    
    void print_line( const std::string& filename, int lnNo )
    {
        using namespace std;
        ifstream file( filename.c_str() );
        if( !file.is_open() )
        {
            cerr << "Fehler beim Oeffnen der Datei " << filename << endl;
            return;
        }
        for( ; lnNo > 1; --lnNo )
            file.ignore( numeric_limits< streamsize >::max(), '\n' );
        string line;
        if( !getline( file, line ) )
        {
            cerr << "Fehler beim Lesen aus der Datei " << filename << endl;
            return;
        }
        cout << line << endl;
    }
    
    int main () 
    {
        using namespace std;
        for( int lnNo; cin >> lnNo; )
            print_line( "input.txt", lnNo );
        return 0;
    }
    

    Gruß
    Werner



  • ich danke für eure hilfe. ich löse das problem jetz mit mehrfach aufruf von fgets.

    @Werner: danke für den tollen code, aber leider übersteigt er mein momentanes verständnis 😞 aber evtl. muss ich mir den demnächst genauer ansehn, weil eig geht es nicht um 10 codes sondern um deutlich mehr. angenommen ich bräuchte dann den letzten code in der textdatei würde die rechenzeit doch relativ "lang" sein.

    danke an alle und grüße



  • Hallo,

    der Beitrag ist zwar schon älter, aber ich würde gerne wissen, wie ich in dem Code von Werner Salomon statt einer ganzen Zeile nur das erste Wort einer Zeile als String einlesen kann.

    Vielen Dank vorab! 🙂

    Grüße
    loup_garou



  • Nekrophilie ist hier nicht gern gesehen.

    Der Code von Walter ist C++ im C-Unterforum.

    Was möchtest du haben (C oder C++)?

    Eröffne einen neuen Thread im richtigen Unterforum (ein Verweis hierer kannst du ja machen).



  • Sorry, bin noch neu.

    Ich habe meine Frage mittlerweile selbst gelöst. Diese drei Zeilen müssen ans Ende der print_line-Funktion gesetzt werden:

    int strpos = line.find(" ");
    string input = line.substr(0, strpos);
    cout << input << endl;
    

Anmelden zum Antworten