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)