McBirne Geschrieben 6. September 2005 Geschrieben 6. September 2005 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 Zitieren
Klotzkopp Geschrieben 6. September 2005 Geschrieben 6. September 2005 - 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. Zitieren
McBirne Geschrieben 7. September 2005 Autor Geschrieben 7. September 2005 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] Zitieren
Klotzkopp Geschrieben 7. September 2005 Geschrieben 7. September 2005 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. Zitieren
McBirne Geschrieben 7. September 2005 Autor Geschrieben 7. September 2005 Werde ich mal versuchen, wenn es noch Probleme gibt, melde ich mich mit den neuen Code... Danke schon mal Zitieren
Empfohlene Beiträge
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.