Zum Inhalt springen

zeile 'n' aus datei auslesen


ComputNik

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...