| 
			
				|  | JLI Spieleprogrammierung 
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 12.03.2004, 20:03    Titel: Datenverarbeitung mit fstream |   |  
				| 
 |  
				| Bei meienm letzten Projekt hatte ich schon angefangen Dateien mit 
  	  | Code: |  	  | fstream Datei("Test.txt"); | 
 statt mit
 
  	  | Code: |  	  | FILE * Datei=fopen(Test.txt"); | 
 zu lesen.
 Für mein neues Projekt wollte ich komplett umsteigen, aber mir fehlen ein paar Funktionen.
 Ich hab schon in etwa folgendes herausgefunden:
 
  	  | Code: |  	  | ifstream Datei; //Eine Datei zum lesen
 fstream Datei;//Eine Datei zum lesen und schreiben
 ostream Datei; //eine Datei zum schreiben
 getline(Datei, Zeile); //Liest die nächste Zeile der Datei in den String
 if(Datei.eof()); //testet ob die Datei zu ende ist
 if(Datei.fail()); //testet ob die SDatei geöffnet werden konnte
 Datei.open("Test.txt"); //öffnet die Datei
 Datei.close(); //schließt die Datei
 
 | 
 Was mir fehlt ist eine Funktion zum schreiben eines Strings in die Datei. Außerdem würde es mich interesieren, ob man den String nur in eine neue Reihe schreiben kann, ihn an die Letzte Reihe anhängen kann oder sonst irgendwo in der Datei einfügen kann. Und gibt es auch möglichkeiten sich in der Datei zu bewegen(wieder zum Anfang gehen, in eine bestimmte Zeiel springen, Zeile vor, Zeile zurück)
 
 Ich hab schon ein bisschen in der MSDN gesucht, aber nix gefunden. Währe nett, wenn jemand ein paar Funktionen beschreiben könnte, oder mir sagen könnte wo ich Tutorials oder so was finden kann.
 
 Mfg Jonathan
 _________________
 https://jonathank.de/games/
 |  |  
		| Nach oben |  |  
		|  |  
		| Mazze JLI'ler
 
 
 Alter: 40
 Anmeldedatum: 02.01.2004
 Beiträge: 145
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 12.03.2004, 20:14    Titel: |   |  
				| 
 |  
				| Jo gibts alles.. guck mal hier:
 http://www.cplusplus.com/ref/iostream/
 (zum schreiben nimm am besten die << >> Operatoren!)
 
 Einfach auf das Klicken was du willst, da gibts ne Referenz mit Beispielen dazu!
 
 P.S.: gehört sowas nicht ins C++-Forum???
 |  |  
		| Nach oben |  |  
		|  |  
		| HotAcid Super JLI'ler
 
  
 Alter: 44
 Anmeldedatum: 04.08.2002
 Beiträge: 372
 Wohnort: Berlin
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 12.03.2004, 21:38    Titel: |   |  
				| 
 |  
				| Hier der schon gepostete Code - zusätzlich wird noch ein String geschrieben/ausgelesen...wenn du irgendwas daran nicht verstehst, sag bitte Bescheid, das kann ich dir gerne alles haarklein erklären! 
 
  	  | Code: |  	  | #include <fstream> #include <iostream>
 
 using namespace std;
 
 int main()
 {
 const char* const dateiname = "datei.txt";
 fstream datei(dateiname,ios_base::in | ios_base::out | ios_base::trunc);
 
 if(!datei)
 {
 cerr << "Fehler beim Öffnen der Datei " << dateiname << endl;
 }
 else
 {
 string bla = "Hallo";
 datei << 123;
 datei << bla;
 datei.seekg(0,ios_base::beg); // An den Dateianfang gehen
 int i;
 string bla2;
 datei >> i;
 datei >> bla2;
 cout << "In " << dateiname << " steht: " << i << " und " << bla2<< endl:
 }
 return 0;
 }
 | 
 _________________
 StGB §§ 328 Abs. 2 Pkt 3:
 Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
 |  |  
		| Nach oben |  |  
		|  |  
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 13.03.2004, 08:09    Titel: |   |  
				| 
 |  
				| Cool, das sieht doch schon ganz prima aus. 
 Ich hab das jetzt so verstanden:
 
  	  | Code: |  	  | ios_base::in | ios_base::out | ios_base::trunc; | 
 bedeutet das man mit den << und >> lesen und schreiben will.
 Aber was heißt das ios_base::trunc?
 << Zeile; //heißt das der String der Datei hinzugefügt wird (macht der ne neue Reihe, oder hängt der an die letzte dran?
 >> Zeile; //heißt die aktuelle Zeile aus der Datei lesen, wenn man keinen String nimmt, versucht der aus der Zeile, ne Zahl zu lesen
 
 Die Datei wird beim Beenden des Programms automatisch geschlossen, man kann aber auch mit
 
  	  | Code: |  	  | fstream Datei;
 Datei.open(dateiname,ios_base::in | ios_base::out | ios_base::trunc);
 Datei.close();
 
 | 
 selber öffnen und schließen.
 
 Danke für die Hilfe, ich werds gleich mal ausprobieren!
 _________________
 https://jonathank.de/games/
 |  |  
		| Nach oben |  |  
		|  |  
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 13.03.2004, 08:17    Titel: |   |  
				| 
 |  
				| Ich hab das Beispiel von HotAcid mal kompiliert. Es treten 4 Fehler auf: 
 
  	  | Code: |  	  | --------------------Konfiguration: test - Win32 Debug-------------------- Kompilierung läuft...
 quellcode.cpp
 F:\C++\test\quellcode.cpp(19) : error C2679: Binaerer Operator '<<' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' akzeptiert (oder keine
 geeignete Konvertierung moeglich)
 F:\C++\test\quellcode.cpp(24) : error C2679: Binaerer Operator '>>' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' akzeptiert (oder keine
 geeignete Konvertierung moeglich)
 F:\C++\test\quellcode.cpp(25) : error C2679: Binaerer Operator '<<' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' akzeptiert (oder keine
 geeignete Konvertierung moeglich)
 F:\C++\test\quellcode.cpp(25) : error C2143: Syntaxfehler : Fehlendes ';' vor ':'
 Fehler beim Ausführen von cl.exe.
 
 test.exe - 4 Fehler, 0 Warnung(en)
 
 | 
 _________________
 https://jonathank.de/games/
 |  |  
		| Nach oben |  |  
		|  |  
		| HotAcid Super JLI'ler
 
  
 Alter: 44
 Anmeldedatum: 04.08.2002
 Beiträge: 372
 Wohnort: Berlin
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 13.03.2004, 09:16    Titel: |   |  
				| 
 |  
				| ok, folgende Ergänzung: 
 
 
 und dann schreibe bitte
 
  	  | Code: |  	  | datei << i << endl; datei << bla << endl;
 | 
 
 Nach dem letzten "endl" muss ein ; anstelle des : stehen.
 
 
 
  	  | HotAcid hat Folgendes geschrieben: |  	  | noch kurz die Erklärungen zu ios_base: in = Datei öffnen zum Lesen
 out = schreiben
 trunc = alten Dateiinhalt überschreiben, falls die Datei schon existiert
 | 
 
 Du solltest schon Antworten auf deine Fragen lesen, ansonsten verliere ich irgendwann die Motivation, dir zu antworten, wenn du permanent nach Sachen fragst, die ich dir eienn Trhead vorher schon erklärt habe.
 
 cu Felix
 _________________
 StGB §§ 328 Abs. 2 Pkt 3:
 Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
 |  |  
		| Nach oben |  |  
		|  |  
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 13.03.2004, 12:35    Titel: |   |  
				| 
 |  
				| Ok ich bin jetzt ein bisschen weiter, aber mir ist aufgefallen, das der nur Text in eine Datei schreibt wenn man sie mit ios_base::trunc neu erstellt hat. Sonst funktioniert das irgendwie nicht: 
  	  | Code: |  	  | fstream DMain(MainDatei, ios_base::in | ios_base::out | ios_base::trunc);
 DMain << "Ein kleiner Testeintrag";
 
 | 
 funktioniert.
 Aber
 
  	  | Code: |  	  | fstream DMain(MainDatei, ios_base::in | ios_base::out);
 DMain << "Ein kleiner Testeintrag";
 
 | 
 funktioniert irgendiwe gar nicht. (Die Datei hab ich vorher natürlich erstellt und auch mit
 
 getestet ob sie geöffnet werden konnte.
 Das kann doch irgendwie nicht sein, das man nur komplett neue Textdateien schreiben kann, und nichts in eine bestehende anhängen kann.
 _________________
 https://jonathank.de/games/
 |  |  
		| Nach oben |  |  
		|  |  
		| HotAcid Super JLI'ler
 
  
 Alter: 44
 Anmeldedatum: 04.08.2002
 Beiträge: 372
 Wohnort: Berlin
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 13.03.2004, 15:07    Titel: |   |  
				| 
 |  
				| kann man 
 
 
 aber das funktioniert nur in Kombination mit "out", du kannst also eine Datei nicht mit "out" UND "app" öffnen
 
 cu Felix
 _________________
 StGB §§ 328 Abs. 2 Pkt 3:
 Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
 |  |  
		| Nach oben |  |  
		|  |  
		| Zyrian Super JLI'ler
 
  
 
 Anmeldedatum: 30.08.2003
 Beiträge: 321
 Wohnort: Essen
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 07.04.2004, 19:39    Titel: |   |  
				| 
 |  
				| wie springt man eigentlich in eine bestimmte zeile, um die dann auszulesen? 
 bisher hab ichs nur auf die schnelle gemacht und zwar so:
 
 
  	  | Code: |  	  | void Text::GetStringFromFile(char* filename, int zeile)
 {
 // ......
 ifstream input;
 input.open(filename);
 
 int i = 1;
 
 while(i <= zeile)
 {
 input.getline(fileread,74);
 text = fileread;
 charText = text.c_str();
 i++;
 }
 
 }
 
 | 
 
 MFG
 Chris
 
 
 <edit>
 Wenn ich mit getline in einem char Array einen String gespeichert habe und diesen String dann einer std::string-Variable zuweise mittels Gleichheitszeichen zuweise, dann gehen die Steuerzeichen \n verloren und werden bei der Ausgabe nicht als Zeilenumsprung gesehen.
 Wie kann ich das ändern bzw. gibt es eine bessere Lösung, um bei einer langen Zeile nach einer bestimmten Anzahl an Zeichen einen Zeilenumsprung zu erzeugen?
 </edit>
 _________________
 Schau mir in die Augen, Kleines.
 |  |  
		| Nach oben |  |  
		|  |  
		| Zyrian Super JLI'ler
 
  
 
 Anmeldedatum: 30.08.2003
 Beiträge: 321
 Wohnort: Essen
 Medaillen: Keine
 
 
 |  |  
		| Nach oben |  |  
		|  |  
		|  |  
  
	| 
 
 | Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten.
 Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
 Du kannst deine Beiträge in diesem Forum nicht löschen.
 Du kannst an Umfragen in diesem Forum nicht mitmachen.
 
 |  
 Powered by phpBB © 2001, 2005 phpBB Group
 Deutsche Übersetzung von phpBB.de
 |