Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 7304 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

C und C++
String einlesen in Array und wieder ausgeben von hinten (4)

Frage von Protected zum Thema C und C ...

Batch & Shell
gelöst Komplette Zeile aus Textdatei auslesen (3)

Frage von tegwert zum Thema Batch & Shell ...

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

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Routers & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Routers & Routing ...

Monitoring
Netzwerk-Monitoring Software (17)

Frage von Ghost108 zum Thema Monitoring ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

Windows 10
Windows 10 Ordnerfreigabe (15)

Frage von Xaero1982 zum Thema Windows 10 ...