|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 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: 39 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: 43 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: 37 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: 37 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: 43 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: 37 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: 43 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
|