[c++] Einbinden einer .txt Datei

fujifilm

Mitglied
Moin Leute,

ich bin neu hier. Ich geb mir größte Mühe, alles so zu beschreiben, dass es schnell klar wird und wenig Aufwand für euch ist. Falls doch mal was nicht so präzise ist, bitte nachfragen. Ich verwende Ecplise Wascana.

Für meinen HiWi-Job bin ich grade fleißig am Progammieren.
Ein Teilprogramm will aber noch nicht richtig.
In diesem möchte ich Daten aus einer .txt Datei einlesen.
Die Datei heißt wasser.txt und ist im selben Ordner wie das Programm.
Das funktioniert allerdings nicht. Hier der Quellcode:

#include<iostream>
#include<cmath>
#include<fstream>
#include<string>
#include<sstream>

using namespace std;

int main()
{

[...]
string datei = "wasser.txt";
ifstream in( datei ); // Textdatei einlesen

if (in)
{
cout<<"Alles hat geklappt";
string zeile;

while( !in.eof())// solange Dateieende nicht erreicht
{
getline( in, zeile); // zeilenweise einlesen
cout<<zeile<<endl;
cout<<a<<endl;
a++;
}
}
else
{
cout <<"Leider ist beim Lesen der Datei thermdat.txt ein Fehler aufgetreten";
}


Mir wird immer "Leider..." ausgegeben.


Vielen Dank schon mal im Vorraus
Fuji
 
Hallo,

Versuch mal statt
C++:
if (in)
folgendes:
C++:
if (in.good())


Danke für deine Antwort; funktioniert aber leider auch nicht :(
EDiT: War nen Versionenfehler. Sry

Hab nen kleinen Fehler oben in meinem Text gehabt und mach das ganze jetzt nochmal in cpp der Übersichthalber:

C++:
/*
 * test.cpp
 *
 *  Created on: 16.09.2011
 *      Author: Jules
 */

#include<iostream>
#include<cmath>
#include<fstream>
#include<string>
#include<sstream>

using namespace std;

int main()
{
	//double NasaKoeff [7][10];
	int a = 1;
	string datei = "thermdat.txt";

	ifstream in( "datei" ); // Textdatei einlesen
	if (in.good())
	{
		cout<<"alles klappt";
		string zeile;
		while( !in.eof())// solange Dateieende nicht erreicht

		{
			getline( in, zeile);	// zeilenweise einlesen
			cout<<zeile<<endl;
			cout<<a<<endl;
			a++;
		}
	}
	else
	{
	cout <<"Leider ist beim lesen der Datei thermdat.txt ein Fehler aufgetaucht";
	}


return 0;
}

mfg
fuji
 
Zuletzt bearbeitet von einem Moderator:
Moin,

hab die falsche Version reinkopiert. Sry. Habs jetzt nochmal überarbeitet.
Hm, hab ich in nem Tutorial gelesen.

Hast du eventuell eine andere Lösung, wie ich das einlesen könnte?

mfg
fuji
 
Hallo,

Habs grad selber versucht. Bei mir mit Visual Studio 2010 hats anfänglich auch nicht funktioniert, hab jetzt grad gesehen das aber Standartmäßig als Ausführ-Verzeichnis im Debug-Mode das Projektverzeichnis und nicht das Ausgabeverzeichnis gesetzt war.
Funktioniert dein Programm wenn dus direkt aus dem Ordner startest?

Edit: Mit dem Konstruktor hast du recht, den gibts wirklich. Naja, man lernt nie aus.
 
Es muss trotzdem if (in.good()) heißen.
Besser if (in.is_open()).

Nebenbei: Ich wusste garnicht das ifstream einen Konstruktor hat der einen String akzeptiert.
Aber auch erst seit C++11.

C++:
	string datei = "thermdat.txt";

	ifstream in( "datei" ); // Textdatei einlesen
Du versuchst hier die Datei namens datei zu öffnen. Wenn du thermdat.txt öffnen willst, musst du
C++:
ifstream in( datei );
schreiben.

C++:
	if (in.good())
C++:
	if (in.is_open())

C++:
		string zeile;
		while( !in.eof())// solange Dateieende nicht erreicht

		{
			getline( in, zeile);	// zeilenweise einlesen
Besser:
C++:
		string zeile;
		while( getline( in, zeile)) // solange Dateieende nicht erreicht
		{

Ansonsten mal das Arbeitsverzeichnis beim Ausführen überprüfen und ggf. selber in der Konsole starten oder einen absoluten Pfad verwenden.

Grüße,
Matthias
 
Zuletzt bearbeitet von einem Moderator:
Moin ihr beiden,

habe das Programm ohne die Vorschläge von Matthias direkt aus dem Ordner per "cmd-konsole" gestartet. Aber das hat leider auch nicht funktioniert.

@Matthias:
Habe deine Vorschläge umgesetzt; allerdings meckert er dann bei "datei":

C++:
string datei = "wasser.txt";

	ifstream in( datei ); // Textdatei einlesen

Ich weiß nicht warum. Wenn ich direkt "wasser.txt" reinschreib akzeptiert er es. Allerdings funktioniert das einlesen dann auch nicht.

In die if-Schleife kommt er auch bei
C++:
if (in.is_open())
nicht rein.

Wie funktioniert das mit dem absoluten Pfad? Das würde ich dann nämlich lernen und versuchen.


Vielen Dank euch
fuji
 
Zuletzt bearbeitet:
Hallo,

der Konstruktor akzeptiert kein string-Objekt sondern nur einen nativen C-String. Schreibe daher:
C++:
ifstream in( datei.c_str() ); // Textdatei einlesen

Ein absoluter Pfad ist eine vollständige Pfadangabe, beginnend mit dem Laufwerk. Also statt "wasser.txt" verwendet man "c:/irgendwas/hier/dort/wasser.txt".

Gruß
MCoder
 
Moin,

@MCoder: Super, zwei neue Sachen auf einen Schlag gelernt.

Aber es funktioniert leider immer noch nicht.
Beim builden kommt nur ein Warning, wenn ich das Programm ausführe, kommt er einfach nicht in die if-schleife.
Ich hau jetzt nochmal den kompletten Quellcode hierrein, vllt. übersehe ich ja was:

C++:
#include<iostream>
#include<cmath>
#include<fstream>
#include<string>
#include<sstream>

using namespace std;

int main()
{
	//double NasaKoeff [7][10];
	int a = 1;
	string datei = "E:\Julius\Programme\Wascana\Workspace\Temperatur\thermdat.txt";

	ifstream in(datei.c_str()); // Textdatei einlesen
	cout<<"test"<<endl;
	if (in.is_open())
	{
		cout<<"alles klappt";
		string zeile;
		while( !in.eof())// solange Dateieende nicht erreicht

		{
			getline( in, zeile);	// zeilenweise einlesen
			cout<<zeile<<endl;
			cout<<a<<endl;
			a++;
		}
	}
	else
	{
	cout <<"Leider ist beim lesen der Datei thermdat.txt ein Fehler aufgetreten";
	}

return 0;
}

Den Pfad habe ich übrigens aus dem Explorer kopiert, daran sollte es nicht liegen.
 
Zurück