ComputNik Geschrieben 2. Januar 2003 Geschrieben 2. Januar 2003 Hallo, Ich habe einen übersetzer geschrieben als quelle dient eine Textdatei deutsches wort mit tab vom englischen getrennt. ich will per zufallszahl etc. eine zeile auslesen und dann entweder das englische oder das deutsche ausgeben. Der benutzer gibt die jeweilige übersetzung ein, dann wird abgefragt richtig falsch etc. Was ist schon da: anzahl der zeilen aus der datei. eine zufallszahl mit time() und rand() Ich brauche etwas was sagt "lese die zeile 'zufall' aus einer datei aus. Ich hab das mit einer schleife probiert und fgets() mehrmals ausgeführt, das ist aber ziemlich umständlich und funktioniert hat das auch nicht so recht Danke Zitieren
nic_power Geschrieben 2. Januar 2003 Geschrieben 2. Januar 2003 Originally posted by ComputNik Ich brauche etwas was sagt "lese die zeile 'zufall' aus einer datei aus. Ich hab das mit einer schleife probiert und fgets() mehrmals ausgeführt, das ist aber ziemlich umständlich und funktioniert hat das auch nicht so recht Das ist aber wahrscheinlich die einfachste Methode. Falls die Datei nicht zu gross ist, solltest Du sie vorher im Stueck einlesen. Dann geht der Zugriff bedeutend schneller und Du kannst direkt ueber einen Index auf die einzelnen Zeilen zugreifen. Nic Zitieren
Klotzkopp Geschrieben 2. Januar 2003 Geschrieben 2. Januar 2003 Oder: Die Datei einmal komplett durchgehen, und die Positionen der einzelnen Zeilenanfänge merken. Dann kann man später direkt an diese Stelle springen. Zitieren
nic_power Geschrieben 2. Januar 2003 Geschrieben 2. Januar 2003 Originally posted by Klotzkopp Oder: Die Datei einmal komplett durchgehen, und die Positionen der einzelnen Zeilenanfänge merken. Dann kann man später direkt an diese Stelle springen. Dafuer muesste ich sogar noch irgendwo ein Stueck Code rumfliegen haben. Bei Interesse kann ich das mal raussuchen. Nic Zitieren
ComputNik Geschrieben 2. Januar 2003 Autor Geschrieben 2. Januar 2003 die ganze datei einlesen würde zwar gehen ist aber doch nicht so das wahre. die Positionen der einzelnen Zeilenanfänge merken gefällt mir gut nur hab ich keine ahnung wie ich das anstellen soll das bissel Code währ also nicht schlecht. Danke Zitieren
Klotzkopp Geschrieben 5. Januar 2003 Geschrieben 5. Januar 2003 Wie wär's denn damit: #include <vector> #include <fstream> #include <string> #include <iostream> using namespace std; vector<int> GetLinePositions( const string& filename ) { vector<int> linestart; if( ifstream textfile( filename.c_str() ) ) { string line; while( true ) { linestart.push_back( textfile.tellg() ); getline( textfile, line ); if( textfile.eof() ) { break; } } } return linestart; } string GetLineStartingAt( const string& filename, int startpos ) { string line; if( ifstream textfile( filename.c_str() ) ) { textfile.seekg( startpos ); if( !textfile.eof() ) { getline( textfile, line ); } } return line; } int main() { string filename = "C:\\WINDOWS\\system32\\eula.txt"; vector<int> linestart = GetLinePositions( filename ); vector<int>::iterator i, iend = linestart.end(); for( i = linestart.begin(); i != iend; ++i ) { cout << *i << endl; cout << GetLineStartingAt( filename, *i ) << endl << endl; } }[/CODE] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.