Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

CPP Problem - Textdatei zeilenweise einlesen und zufällige Zeile ausgeben

Frage Entwicklung C und C++

Mitglied: Tiggalot

Tiggalot (Level 1) - Jetzt verbinden

25.03.2009, aktualisiert 15:46 Uhr, 7232 Aufrufe, 2 Kommentare

Hallo zusammen.

Ich bin gerad dabei mich in C++ einzuarbeiten und habe nun als kleine Übung vor eine Textdatei zeilenweise einzulesen und eine zufällige Zeile auszugeben.

Meine momentane vorgehensweise ist folgende:
1. Datei öffnen
2. Schleife laufen lassen um die Anzahl der Zeilen zu ermitteln
3. An den Anfang der Datei zurückspringen
4. Ein String Array anlegen dessen Dimension die Anzahl der Zeilen ist
5. Eine Zufallszahl generieren
6. Eine zweite Schleife laufen lassen und den Zeileninhalt in mein Array einlesen
7. Den Inhalt der Zeile mit der Nummer der Zufallszahl ausgeben.

Das ermitteln der Zeilenanzahl klapp, das generieren einer Zufallszahl klappt, aber was nicht klappt ist das zurückspringen an den Anfang der Datei. Ich hab auch schonmal probehalber tellg eingebaut gehabt um herauszufinden ob er überhaupt springt, aber das einzige das ich zurückbekommen habe war der Wert -1, welcher nur sagt das es einen Fehler gab...

01.
#include <iostream> // für cin & cout 
02.
#include <fstream> // um Dateien zu einzulesen 
03.
#include <string> // für den Datentyp string 
04.
#include <stdlib.h> // weil ich es kann 
05.
#include <time.h> // um einen fortlaufenden Wert für das generieren einer Zufallszahl zu haben 
06.
using namespace std; 
07.
 
08.
int main () 
09.
10.
	//Variablendeklaration 
11.
	int i, zufall, cnt = 0; 
12.
	string foo; 
13.
	 
14.
	//Zufallszahlengenerator an Zeit gekoppelt initialisieren 
15.
	srand ( time(NULL) ); 
16.
	 
17.
	//Datei öffnen bzw. Fehler melden wenn dies nicht möglich ist 
18.
	ifstream datei; 
19.
	datei.open("excuses.txt", ios::in | ios::binary); 
20.
	if (!datei) 
21.
22.
		cerr << "Kann die Datei: excuses.txt nicht öffnen!" << endl; 
23.
		return 1; 
24.
25.
	 
26.
	// Anzahl der Zeilen ermitteln (alternativ zu foo könnte ich auch eine feste Größe angeben) 
27.
	while (getline(datei, foo)) 
28.
29.
		cnt ++; 
30.
31.
	 
32.
	//Zufallszahl zwischen 0 und Anzahl der Zeilen in Datei generieren 
33.
	zufall = rand() % cnt; 
34.
	 
35.
	// Array von der größe der Zeilenanzahl erstellen 
36.
	string puffer[cnt]; 
37.
	i = cnt; 
38.
	 
39.
	// An Anfang der Datei springen 
40.
	datei.seekg(ios_base::beg); 
41.
	 
42.
	//Zeilenweise Datei einlesen 
43.
	while (getline(datei, puffer[i])) 
44.
45.
		i--; 
46.
47.
	//Datei schließen 
48.
	datei.close(); 
49.
	 
50.
	//Ausgabe einer zufälligen Zeile 
51.
	cout << "Number of available excuses: " << i << endl; 
52.
	cout << "Excuse No. " << zufall << ": " << puffer[zufall] << endl; 
53.
	return 0; 
54.
}
Mitglied: Tiggalot
26.03.2009 um 11:28 Uhr
Habe das Problem nun umgangen indem ich das Zeilen zählen und das einlesen in separate Funktionen ausgegliedert habe.

Aber fall jemandem noch was zum Thema einfällt wäre ich trotzdem dankbar.
Bitte warten ..
Mitglied: chfr77
01.05.2009 um 14:24 Uhr
Ich hab das auch mal gemacht, aber ohne doppeltes Auslesen.
01.
// ausrede.cpp 
02.
#include <string> 
03.
#include <iostream> 
04.
#include <fstream> 
05.
#include <vector> 
06.
#include <time.h> 
07.
int main(int argc, char* argv[]) 
08.
{	 
09.
srand(static_cast<unsigned>(time(0))); 
10.
char * szBuf = new char[0x1000]; 
11.
std::ifstream file_in(argv[1]);  
12.
std::vector<std::string> vec_zeilen; 
13.
while (file_in.getline(szBuf, 0x1000))  
14.
vec_zeilen.push_back(std::string(szBuf)); 
15.
std::cout << "Es geht nicht, weil: " <<  
16.
vec_zeilen.at(rand() % vec_zeilen.size()) << std::endl; 
17.
delete [] szBuf; 
18.
return 0; 
19.
}
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(4)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Windows Server
gelöst Powershell array zeilenweise in Textdatei ausgeben (6)

Frage von Peter0816 zum Thema Windows Server ...

Batch & Shell
gelöst Bestimmte Zeile einer Textdatei mit Batch auslesen (2)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Batch & Shell
gelöst Erstellungsdatum vor jede Zeile einer Textdatei schreiben (5)

Frage von freakonaleash zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Erkennung und -Abwehr
Virenschutz - Meinungen (23)

Frage von honeybee zum Thema Erkennung und -Abwehr ...

Windows 10
Welches OS für Firmengeräte? (17)

Frage von MarkusVH zum Thema Windows 10 ...

Hyper-V
Langsames Netzwerk i210 LAN Karte (11)

Frage von Akcent zum Thema Hyper-V ...

Netzwerke
Abisolierwerkzeug (11)

Frage von SarekHL zum Thema Netzwerke ...