Bestimmte Zeile aus .txt lesen



  • 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