Text in Datei schreiben
-
Ichj habe nichts weiter gefunden... Könnte es mir hemand erklären?(einfach ein Codebeispiel) oder ein anderes Tutorial als den link den ich da hatte verlinken?
-
ok also dann will ich dir mal helfen,
mach die im internet mal über "C++ fstream" schlau, oder suche bei google wie so sachen wie "C++ Dateien schreiben" da findest du schon die ersten lösungen, und wenn du da immernoch probleme hast, dann kannste ja mit deinem code kommen und uns den zeigen und dir wird geholfen,;)
-
hmm... also in dem thread (wessen link du gepostet hast) steht eigtl alles drin...
versuch doch einfach mal das durchzulesen und dabei was zu verstehen - und frag noch mal, falls du was nciht verstehst (aber bissl genauer, als "kapier ich ne" ^^)das hab ich jz aus dem thread rausgefischt (arbeite ca. nie mit Dateien, deshalb weiß ich es auch nicht aus dem Kopf - aber so sollte das gehen ^^):
fstream STREAM; //anlegen des streams STREAM.open ("myfile.txt", ios::in); //öffnen einer datei //1. Zeile + 2. Zeile _sollte_ so zusammenzufassen gehen: fstream STREAM ("myfile.txt", ios::in); int inhalt_der_textdatei (0); //du willst nen int auslesen -> du brauchst ne int-variable inhalt_der_textdatei << STREAM; //du liest nen int aus... if (!STREAM.good ()) //und es hat auch geklappt (wenn das true ist) return 0; //wenn nicht, dann musste den fehler entsprechend behandeln - ich hab nur ma nen return 0 genommen ^^naja - ich hoffe, es ist ne komplett falsch und es hilft dir ein wenig...
bb
-
Also ich habe noch einmal nachgesehen und gegoogelt und jetzt folgenden Code geschreibene:
char Test[50]; fstream f; f.open("test.txt", ios::out|ios::in); f << " Text" << endl; f>>Test; MessageBox(NULL,Test,0,0); f.close();Der Text geht auch in die Datei rein, aber leider kommt er nicht wieder raus... Zumindest steht in der MessageBox nichts weiter drin! Was mache ich falsch=
-
#include <fstream> //dateioperationen #include <string> //string eben - char is doof :P using namespace std; //klar?! std::string Test; //nicht char Test[50]; fstream f; f.open("test.txt", ios::out|ios::in); //die flags hab ich jz ne noch ma nachgeguckt (obs da iwas noch passenderes gibt - aber so sollte es auf jeden Fall gehen) f << "Text" << endl; //" Text" ist doof - weil immer nur bis zum Leerzeichen gelesen wird (also bei {stream x} '>>' {variable y vom Typen z}) /* f.seekg (...) oder irgendwas in der Richtung - such einfach nach 'seek' (vll gibts auch ne Methode rewind () oder so was in der Richtung) Der 'Zeiger' ist ja in der Datei jetzt ganz am Ende - und dort gibts nichts mehr zu lesen - also musst du ihn erst wieder an den Anfang setzen */ f >> Test; cout << Test << endl; //MessageBox(NULL,Test,0,0); f.close();Ok?
bb ^^
-
unskilled schrieb:
#include <fstream> //dateioperationen #include <string> //string eben - char is doof :P using namespace std; //klar?! /* wenn du schon using namespace std nimmst brauchst du das std vor string nicht mehr ;) */ string Test; //nicht char Test[50]; fstream f; ...Ansonsten sollte es so funktionieren.

mfg kaffee
-
ja - das hatte ich danach auch gesehen - war mir das edit aber nicht wert... naja... ^^
-
Also letzendlich muss ich garnichts mehr reinschreiben, ich habe grade eine bessere lösung dafür gefunden, aber ich muss weiterhin etwas aus einer Datei auslesen.. Ich habe eine Datei in der steht immer eine Zahl( hier im Beispiel mal die 1)
Ich bracuhe diese Zahl dann letzendlich als integer Wert...
Ich habe es jetzt mit dem Code von unskilled versucht und es so gemacht:using namespace std; int WINAPI WinMain (HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpcmdline, int ncmdshow) { std::string Test; int iTest; fstream f; f.open("Test.txt", ios::out|ios::in); f >> Test; f.close(); iTest=(int)Test; if (iTest==1) {MessageBox(NULL,"Klappt",0,0);} }Jetzt bekomme ich leider die Meldung, dass ich einen string nicht in eine int umwandlen kann... Das ist aber leider der Hauptzweck des Programms.
Also Frage1: Wie kann ich das so machen dass ich entweder den String umwandle, oder ohne string auskommen.
2. Ich habe zum Test ob denn überhaupt etwas ausgelesen wird das Programm einmal so geschribene( auch wenn es jetzt seinen Zweck verfehl, weil keine INteger vorhanden ist)fstream f; f.open("Test.txt", ios::out|ios::in); f >> Test; f.close(); f.open("test2.txt", ios::out|ios::in); f<<Test; f.close();Leider wird keine test2.txt erstellt --> Der Wert wird immernoch nciht ausgelesen

Jetzt kommt sicher gleich die Frage ob wirklich etwas in der Textdatei steht und ob kein Leerzeicen davor steht...
Also ich habe eine Editor- Textdatei names Test erstellt und in diese Datei als erstes Zeichen eine 1 reingeschreiben(und dann gespeichert) Ich hoffe jemandem fällt noch etwas ein. Danke
-
Fragezeichen4556 schrieb:
... Jetzt bekomme ich leider die Meldung, dass ich einen string nicht in eine int umwandlen kann... Das ist aber leider der Hauptzweck des Programms.
Also Frage1: Wie kann ich das so machen dass ich entweder den String umwandle, oder ohne string auskommen.
2. Ich habe zum Test ob denn überhaupt etwas ausgelesen wird das Programm einmal so geschribene( auch wenn es jetzt seinen Zweck verfehl, weil keine INteger vorhanden ist)fstream f; f.open("Test.txt", ios::out|ios::in); f >> Test; f.close(); f.open("test2.txt", ios::out|ios::in); f<<Test; f.close();Leider wird keine test2.txt erstellt --> Der Wert wird immernoch nciht ausgelesen

Zunächst einmal solltest Du ifstream verwenden um etwas zu lesen. Ein int zu lesen ist sehr einfach - hier immer mit Test auf Lesefehler:
#include <iostream> #include <fstream> int main() { using namespace std; int iTest; ifstream f("Test.txt"); // ohne ios::in, das macht ifstream schon if( !f.is_open() ) { cerr << "Fehler beim Oeffnen der Datei" << endl; return -1; } if( f >> iTest ) { cout << iTest << " korrekt gelesen" << endl; } return 0; // ohne f.close() das macht der Destruktor von f schon richtig }Dann solltest Du eine fstream-Variable nicht mehrfach verwenden. Wenn vorher eine Fehler aufgetreten ist, so merkt sich das der Stream und anschließend funktioniert dann ein nochmaliges Öffnen ggf. nicht mehr. Also wenn schon - dann etwa so:
// .. Code int iTest; // z.B. { ifstream f(...); // Lese was aus f; } // sorgt für f.close() { ofstream f(...); // hier ist f wieder frisch // nach f schreiben } // .. ganz normal weitermachenGruß
Werner
-
bei int so:
(string zu int sollte auch mit 'atoi' gehen oder so was in der Richtung - ist aber alles C und kein C++^^)int iTest; fstream f; f.open("Test.txt", ios::out|ios::in); f >> iTest; if (f.fail ()) //es ging was schief { //fehlerbehandlung + f.close (); } else { f.close (); cout << "deine zahl heisst jz: " << iTest << endl; }ok?
-
Es gibt heir irgendwo einen Beitrag im FAQ, "Einmal Zahl und zurück" oder so, da stehen alle Möglichkeiten, auch (C++) stringstreams!
-
Unskilled das klappt immernoch nciht
Zunächst einmal solltest Du ifstream verwenden um etwas zu lesen. Ein int zu lesen ist sehr einfach - hier immer mit Test auf Lesefehler:
Super vielen Dank das funktioniert bestens