Top-Themen

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, 7325 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
Windows Server
Powershell array zeilenweise in Textdatei ausgeben
gelöst Frage von Peter0816Windows Server6 Kommentare

Hallo, ich habe folgendes vor: $features = Get-WindowsFeature $features = $features.name und die Ausgabe am Bildschirm erscheint auch richtig: ...

Batch & Shell
Textdatei zeilenweise in Variable schreiben
gelöst Frage von goodbytesBatch & Shell20 Kommentare

Hallo, mit einer Batch möchte ich mehrere Laufwerke mappen, abhängig vom Usernamen. Klar könnte ich auch für jeden User ...

VB for Applications
Textdatei zeilenweise nach Datum sortieren
gelöst Frage von GurkenhobelVB for Applications2 Kommentare

Hallo Gemeinde, mehrere umfangreiche Textdateien, in denen zeilenweise wichtige Daten und Termine eingetragen sind, sollen zeilenweise nach dem Datum ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst Frage von CreatorXBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 104 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell16 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...

Hardware
Fujitsu Workstation mit K80 und Quadro P5000, Fehlermeldung: Connect Power Adapter
Frage von MachelloHardware7 Kommentare

Hallo Zusammen, ich benötige euren Rat da ich ratlos bin. Folgende Konfiguration im Büro: Fujitsu Workstation Celcius R940 Power ...