Zum Inhalt springen

Problem beim Einlesen einer txt Datei


McBirne

Empfohlene Beiträge

Hallo zusammen,

ich möchte eine txt Datei einlesen. Dabei möchte ich auch gerne den String in eine Float und int umwandeln. Mich interessieren allerdings nur die Zahlen. wenn zwischendrin Text kommt ist der uninteressant. Das Trennzeichen zwischen den einzelnen Zahlen ins ein Leerzeichen...

Inhalt der txt Datei:


2

0.00 0.00 1 0 1 1

0.00 0.00 1 1 1 1

1.20 0.00 1 2 2 1

text

1.20 0.00 1 3 2 1

2.40 0.00 1 4 3 1
so sieht mein Programm bis jetzt aus...
void CInitHochregallager::Einlesen()

{


	static FILE * datei1 = NULL;

	const char* const pFILENAME = "test.txt";//Name der einzulesenden Datei



	datei1 = fopen("Durchlaufzeit1.txt","w");

	using std::cout;

	using std::endl;

	using std::string;

	using std::getline;

	// Eingabedatei oeffnen

	std::ifstream inDatei;

	inDatei.open(pFILENAME);

	if (!inDatei)

	{

		cout << "Datei " << pFILENAME << " kann nicht geoeffnet werden!" << endl;

		exit(1);

	}

	// Komplette Datei bearbeiten

	do

	{

		std::string line;	// Komplette Zeile aus der Datei		

		std::string sAnzGassen,sRest;	// Zu extrahierende 'Felder' aus der Dateizeile

		int anzGassen;		

		std::istringstream is;	// Konvertierungsstream

		getline(inDatei,line);	// Zeile einlesen

		if (inDatei.eof())	continue; // Bei erreichen des Dateiendes den Rest ueberspringen

		is.str(line);	// Eingelesene Zeile dem Konvertierungsstream zuweisen


		// zu extrahierende Teile einlesen

		getline(is,sAnzGassen,' ');

		getline(is,sRest,' ');

		sRest="Leer";

		// und ausgeben in Datei

		fprintf(datei1,"%s %s\n",sAnzGassen, sRest);

	} 

	while (!inDatei.eof());

	   // Datei wieder schliessen

	   inDatei.close();   

	   fclose(datei1);

}
Die Ausgabe von dem Programm ist leider nicht so toll, es läuft nicht bis zum Ende der Zeile und schreibt an den Anfang immer ein t. die Ausgabe:
t 2

t 24

t 0.00

t 0.00

t 1.20

t 1.20

t 2.40

t 2.40

t 3.60

Vielen Dank schon mal im Voraus

Link zu diesem Kommentar
Auf anderen Seiten teilen

- Warum mischst du die C-Dateifunktionen (fopen, fprintf) mit den C++-Streams?

- Warum ist datei1 static?

- Wie soll denn die Ausgabedatei aussehen?

Bei mir stürzt den Programm übrigens noch bei der Verarbeitung der ersten Zeile ab. Du benutzt std::string als Parameter für fprintf, das erzeugt undefiniertes Verhalten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Static von datei1 habe ich gemacht, da es bei nicht Static bei mir nicht funktioniert hat.

OK, das mit dem Mischen der C und C++ Funktionen war eigentlich nicht geplant. Sollte rein c++ sein. Ergeben sich daraus Probleme?

Die Ausgabedatei soll wie die Eingabedatei aussehen, allerdings ohne die Textteile. Und ich möchte die Zahlen gern separat einlesen, da ich sie später als int oder float weiterverwenden möchte. Die Ausgabedatei ist sozusagen nur ein Test, ob die Variablen auch richtig eingelesen werden.

ach ja, ich habe auch noch einige Includes , die benötigt werden, vielleicht läuft es dann...


#include "iostream"
#include "fstream"
#include "string"
#include "sstream"
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Static von datei1 habe ich gemacht, da es bei nicht Static bei mir nicht funktioniert hat.
Siehe dazu meine Signatur ;)

OK, das mit dem Mischen der C und C++ Funktionen war eigentlich nicht geplant. Sollte rein c++ sein. Ergeben sich daraus Probleme?
Nicht direkt. Es gibt halt diverse Stolpersteine, wie z.B. das sich die printf/scanf-Funktionen nicht mit den C++-Objekten vertragen. Außerdem sieht es sehr seltsam aus.

Die Ausgabedatei soll wie die Eingabedatei aussehen, allerdings ohne die Textteile. Und ich möchte die Zahlen gern separat einlesen, da ich sie später als int oder float weiterverwenden möchte. Die Ausgabedatei ist sozusagen nur ein Test, ob die Variablen auch richtig eingelesen werden.
Ok.

Der dicke Fehler im Code is wie gesagt der, dass du std::string als Parameter für fprintf benutzt, das kann nicht gutgehen. Du könntest std::string::c_str benutzen, um einen char const * zu bekommen, mit dem kommt fprintf zurecht. Ich würde aber vorschlagen, dass du das Programm erst mal komplett entweder auf die C-Dateifunktionen oder die C++-Streams umstellst. Möglicherweise läuft's dann ja schon ;)

ach ja, ich habe auch noch einige Includes , die benötigt werden, vielleicht läuft es dann...
Ohne die würde es sich gar nicht kompilieren lassen. Allerdings solltest du die Dateinamen in spitze Klammern statt in Anführungszeichen setzen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...