Bestimmte Zeile aus textfile auslesen



  • Hallo miteinander
    Ich habe folgendes Problem:
    Ich habe ein Programm das informationen aus einem Textfile ausliest.
    Da aber noch sehr viel Müll in textfile steht möchte ich nur bestimmte zeilen auslesen.
    Mein Textfile sieht Beispielsweise so aus:
    ________________________
    Uninteressante daten1
    Uninteressante daten2
    Uninteressante daten3
    Uninteressante daten4
    Uninteressante daten5
    Uninteressante daten6
    Uninteressante daten7
    Uninteressante daten8
    Uninteressante daten9
    INTERESSANTE DATEN10
    Uninteressante daten11
    ________________________

    Ich hätte nun gerne die Daten aus der Zeile 10 eingelesen...
    Hätte einer eine idee , wie man das elegant löst? :xmas1:
    Wäre euch sehr dankbar! über ein bisschen code würde ich mich natürlich auch freuen!
    Ich benutze das Visual Studio6 C++ unter MFC
    Es grüsst Skipper



  • Wenn alle Zeilen die selbe Länge haben, könntest du mitt seekg(10*Zeilenlaenge) an die richtige Position vorspulen und dann von dort anfangen zu lesen. Aber normalerweise bleibt dir wohl nichts übrig, als die ersten neun Zeilen zu lesen und verwerfen.



  • mhhh...Nein die Zeilen sind alle unterschiedlich lang...
    Aber kann ich ein txt file wenigstens Zeile um Zeile einlesen?
    Wenn ja, wäre es doch naheliegend, dass ich an eine bestimmte Zeile springen könnte oder? 😕
    mfg



  • Schau dir mal CStdioFile an. 🙂



  • Skipper schrieb:

    Aber kann ich ein txt file wenigstens Zeile um Zeile einlesen?

    Ja, kannst du - das Zeilenende wird durch ein '\n' in der Datei gekennzeichnet.



  • Könntest du mir bitte ein kleines Beispiel geben? ich bin eben immer noch recht am anfang am lernen 🙂

    if (-1 != m_sAusgabe.Find('\n')) {
    
             }
    

    ist das der richtige ansatz?
    gruss



  • Erste Frage: Was verwendest du zum Einlesen? CStdioFile::ReadString() liest eine komplette Textzeile ein, genauso std::getline() (für fstreams). Dann mußt du nur noch mitzählen, wieviele Zeilen du gelesen hast.

    PS: Wenn du öfter durch die selbe Datei hangeln willst - lies sie lieber einmal komplett ein und arbeite dann auf der eingelesenen Kopie.



  • CFile myFile;
        wchar_t* pFileName = _T("temp.txt");
    
          if(myFile.Open( pFileName, CFile::modeRead) == NULL)
            {
               //Datei konnte nicht geöffnet werden
               m_sAusgabe = ("Es ist ein Fehler aufgetreten beim Oeffnen des Files!");
            } 
            else
            {
              //Konnte ohne Fehler geöffnet werden!
    
              int nLength = myFile.GetLength();   
    
              //extern CFile cfile;
              wchar_t* pcBuffer = new wchar_t[nLength];
    
              myFile.Read( pcBuffer, nLength);
    
              //Gemessene Daten sind in m_sAusgabe.
              m_sAusgabe = *pcBuffer;
    
              myFile.Close();
    
              delete [] pcBuffer;
    

    Ich lese die ganz datei zuerst einmal ein... und dan verarbeite ich den String (m_sAusgabe) weiter... Nun muss ich das file noch auswerten... 🙂



  • Also wenn du dich häufiger auf "Zeilen" beziehen mußt, solltest du das Paket an den '\n' aufsplitten und in einen vector o.ä. unterbringen:

    vector<string> data;
    string input_line;
    ifstream datei("temp.txt");
    while(getline(datei,input_line)
      data.push_back(input_line);
    

    (das ist jetzt die Variante mit STL-Mitteln, auf MFC-Klassen bezogen sieht es vermutlich ähnlich aus)


Log in to reply