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, 7208 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
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

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

Frage von Peter0816 zum Thema Windows Server ...

Batch & Shell
gelöst Batch ausgabe zeilenweise stat spaltenweise ausgeben (4)

Frage von sugram 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 ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...