int Werte innerhalb einer Datei
-
Hallo,
Ich hoffe jemand kann mir ein anschauliches Beispiel für folgenden Fall liefern:
Der int Wert in einer Datei (int vermoegen) soll ausgelesen werden, mit einem anderen Wert verrechnet bzw. ersetzt werden und wieder in die Datei geschrieben werden.
Das ganze scheitert an der Tatsache dass vor dem int-Wert einige Strings stehen die mit getline() ausgelesen werden und ich keine passende Funktion kenne um etwas anderes als Strings auszulesen.
Im IRC wurde mir geraten datei.ignore() >> vermoegen zu verwenden, allerdings sehe ich mich da vor das Problem gestellt dass die zu ignorierenden positionen nicht konstant sind.
-
Dann lies doch die Datei ganz ein und speichere sie mit verändertem Wert wieder. Wo ist das Problem?
-
Das Problem ist, wenn ich einen Int Wert aus der datei auslese, und danach einen String (mit getline()), passiert das gleiche wie bei der Verbindung cin - getline():
Der getline Aufruf wird übersrpungen.
-
Kannst du bitte ein oder zwei kurze anschauliche Beispiele für dein Textformat bringen? Ich kann nicht so recht nachvollziehen, wo dein Problem ist. Vielleicht kannst du auch einen kurzen Code präsentieren, welcher dir bei diesem Textformat scheitert.
Grüssli
-
Schande über mich, ich bin doof.
Problem ist gelöst, ich bin davon ausgegangen dass wenn ich den Wert mit datei >> Variable einlese, nicht in die nächste Zeile gesprungen wird.
Um keinen neuen Thread eröffnen zu müssen, frage ich aber hier gleich mal nach meinem nächsten Problem:
switch (login()) { case 123456: konto.open("0000.txt", ios::in) ; break ; case 654321: konto.open("0001.txt", ios::in) ; break ;Hier werden, je nach Eingabe, verschiedene Dateien geöffnet. Etwas weiter möchte ich die Detei schließen um sie gleich darauf zum leeren und neu schreiben wieder zu öffnen. Allerdings bräuchte es dann ja erneut die switch-Abfrage famit auch die korrekte Datei geöffnet werden kann.
Wie könnte ich das umgehen? Wäre es zum Beispiel möglich statt datei.open("xxx.txt") zu verwenden: datei.open(stringvariable)?
-
wabbul schrieb:
Wie könnte ich das umgehen?
Schleife? Oder
std::mapverwenden?wabbul schrieb:
Wäre es zum Beispiel möglich statt datei.open("xxx.txt") zu verwenden: datei.open(stringvariable)?
Ehm, ja ... wieso versuchst du es nicht einfach?
#include <string> #include <fstream> int main() { std::string fileName = "hallo.txt"; std::ofstream out(fileName.c_str()); out << fileName; return 0; }Grüssli
-
Entschuldige. Ich hatte es ohne das Anhängsel .c_str() versucht, da ich das noch nicht kannte.
Ein letzte Frage hätte ich als Anfänger da noch:
Wo liegt z.B der Unterschied zwischenstring filename ="Hallo.txt" ;und
std::string fileName = "hallo.txt";?
Herzlichen Dank für deine Hilfe.
-
wabbul schrieb:
Entschuldige. Ich hatte es ohne das Anhängsel .c_str() versucht, da ich das noch nicht kannte.
Dann sag doch, was du versucht hast und woran du gescheitert bist. Dann hätte ich dir nämlich gleich den folgenden Link geben können:
http://www.cplusplus.com/reference/string/string/c_str/wabbul schrieb:
Ein letzte Frage hätte ich als Anfänger da noch:
Wo liegt z.B der Unterschied zwischenstring filename ="Hallo.txt" ;und
std::string fileName = "hallo.txt";?
Die Klasse
stringaus der Standardbibliothek liegt im Namensraumstd. Wenn du vernünftigerweise nicht immer sofort einusing namespace std;hinschreibst, dann musst du dem Kompiler mitteilen, wo er denn diese Klasse suchen muss, also musst dustd::stringschreiben.Hier zum Beispiel ein Thread, wieso man
using namespace std;vermeiden sollte:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1697944.htmlGrüssli
-
Dravere schrieb:
Ehm, ja ... wieso versuchst du es nicht einfach?
#include <string> #include <fstream> int main() { std::string fileName = "hallo.txt"; std::ofstream out(fileName.c_str()); out << fileName; return 0; }Ich verzweifle noch.
Was gestern noch klappte, läuft heute nichtmehr:string datei="0000.txt", var ; fstream konto(datei.c_str()); konto.open(datei.c_str(), ios::in) ; getline (konto, var) ;