JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Echt mieses Problem mit Textdateien
Gehe zu Seite Zurück  1, 2, 3
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 10.03.2004, 17:10    Titel: Antworten mit Zitat

du brauchst natürlich die Zeilen

Code:

#include <fstream>

using namespace std;

_________________
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 10.03.2004, 17:10    Titel: Antworten mit Zitat

Wenn du meine vorherigen Posts aufmerksamer gelesen hättest, wüsstest du auch was man für includes einbinden muss... okay nochmal...

Code:

// Alle OHNE .h !!
#include<iostream>
#include<string>
#include<fstream>

using namespace std;

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 10.03.2004, 17:13    Titel: Antworten mit Zitat

@hazel: geile sig:) ist mir bis jetzt noch gar nicht aufgefallen...
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 10.03.2004, 17:18    Titel: Antworten mit Zitat

Zitat:

ich gehe jetzt mal davon aus das datei sowas ähnliches wie FILE * Datei ist, also eine Variable mit die Informationen zur Datei enthält(Dateiname, aktuelle Position...). Stimmt das Überhaupt?

Ja, fast... die Streamklasse enthält eine Datezugriffsklasse und ermöglicht dir die Inhalte bequem auszulesen.

Zitat:

Und dann wird mit:
Code:
ifstream datei(MainDatei);

die MainDatei (char MainDatei[18], enthält den Dateiname) gar nicht geöffnet?
Tut mir ja leid, das ich dumm Frage, aber ich habs irgendiwe noch nicht so ganz verstanden.

Ja, die Datei mit dem Dateinamen der dem Konstruktor übergeben wird, wird versucht zu öffnen(der Satz hört sich irgendwie falsch an... :P).

Ich habe nix gegen deine Fragen, sondern nur dagegen, dass du dir anscheinend meine Posts nicht richtig durchgelesen hast. Wenn ich etwas lernen will dann beschäftige ich mich intensiv mit der Materie und frag nicht ob mir jemand den Code umschreiben kann.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 10.03.2004, 17:30    Titel: Antworten mit Zitat

Hazel hat Folgendes geschrieben:

Ja, die Datei mit dem Dateinamen der dem Konstruktor übergeben wird, wird versucht zu öffnen(der Satz hört sich irgendwie falsch an... Razz).


Ja, es wird versucht, die Datei mit dem Dateinamen, der dem Konstruktor übergeben wird, zu öffnen.

So meinst du das wohl Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 10.03.2004, 17:33    Titel: Antworten mit Zitat

Danke... ich brauche mehr Schlaf und weniger Stress. ;)
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 10.03.2004, 18:06    Titel: Antworten mit Zitat

Also:
Ein FETTES Dank an alle die mir hie so viel geholfen haben! Ich habs jetzt endlich raus, und hab ganz nebenbei noch eine weitere Methode kennen gelernt, wie ich Textdateien lesen kann.
Es läuft jetzt endlich alles so, wie ich es mir vorgestellt habe. Darum hab ich beschlossen für alle die es interesiert noch mal den vollständigen Quelltext abzubilden. Man kann sich das Projekt aber auch in Kürze auf www.C3-Soft.de.vu runterladen.
Also, danke noch mal an alle!

Code:

#include <iostream.h>
#include <stdio.h>
#include <string>
#include<string>
#include<fstream>

void Write(char Text[]);

using namespace std;

int main()
{
   char ProjektName[8];
   char MainDatei[18], SeiteDatei[18], TitelDatei[18], NeueDatei[18], BottomDatei[18];
   string zeile;
   FILE * Datei=NULL, * DSeite, *DTitel, *DNeu, *DBottom;
   char Puffer2[255];
   cout << "Meine Webseite V. 0.1\n";
   cout << "Geben sie den Projektnamen ein: (max. 8 Buchstaben)\n";
   cin >> ProjektName;
   sprintf(MainDatei, "%s\\main.txt", ProjektName);
   cout << "\nProjekt Main-Datei: " << MainDatei << "\n";
   

      ifstream datei(MainDatei);//Die Main Datei laden
      cout << "\nDas Projekt wurde geöffnet!\n";
      
      while(!datei.eof())
      {
         //Die nächste Datei aus der Projektdatei öffnen
         getline(datei, zeile);
         //fgets(Puffer, 255, Datei);
         sprintf(SeiteDatei, "%s\\%s.txt", ProjektName, zeile.c_str());
         DSeite=fopen(SeiteDatei, "r");
         if(NULL!=DSeite)
         {
            cout << SeiteDatei << " wurde geladen\n";
         }
         else
         {
            Write("Fehler beim öffnen der Datei:-");
            Write(SeiteDatei);
         }
         
         //Den Seitenkopf laden
         sprintf(TitelDatei, "%s\\head.txt", ProjektName);
         DTitel=fopen(TitelDatei, "r");
         if(NULL==DTitel)
         {
            Write("Titeldatei konnte nicht geöffnet werden");
         }
         

         //Das Seitenende laden
         sprintf(BottomDatei, "%s\\bottom.txt", ProjektName);
         DBottom=fopen(BottomDatei, "r");
         if(NULL==DBottom)
         {
            Write("BottomDatei konnte nicht geöffnet werden");
         }

         //Die neue Datei erstellen
         sprintf(NeueDatei, "%s\\%s.htm", ProjektName, zeile.c_str());
         DNeu=fopen(NeueDatei, "w");
         if(NULL==DNeu)
         {
            Write("Neue Datei konnte nicht erstellt werden");
            Write(NeueDatei);
         }

         while(!feof(DTitel))//Die Titeldatei in die NeueDatei schreiben
         {
            fgets(Puffer2, 255, DTitel);
            fprintf(DNeu, Puffer2);
         }
         fclose(DTitel);

         while(!feof(DSeite))//Die eigentliche Seite in die NeueDatei schreiben
         {
            fgets(Puffer2, 255, DSeite);
            fprintf(DNeu, Puffer2);
         }
         fclose(DSeite);

         while(!feof(DBottom))//Die Seitenendedatei hinzufügen
         {
            fgets(Puffer2, 255, DBottom);
            fprintf(DNeu, Puffer2);
         }
         fclose(DBottom);


         //und die neue Datei schließen
         fclose(DNeu);
         
         cout << "Datei erfolgreich hinzugefügt\n";
      }
   

   cout << "Ihr Projekt wurde erfolgreich abgeschlossen!\n";
   cin >> ProjektName;
   return 0;
}

void Write(char Text[])
{
   FILE *Datei;
   Datei=fopen("Error.txt", "a");
   fprintf(Datei, "%s\n", Text);
   fclose(Datei);
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 10.03.2004, 18:59    Titel: Antworten mit Zitat

Ich würde dir noch empfehlen, anstelle von

Code:
char MainDatei[18], SeiteDatei[18], TitelDatei[18], NeueDatei[18], BottomDatei[18];


zu benutzen, dieses zu benutzen:

Code:
string MainDatei, SeiteDatei, TitelDatei,NeueDatei;

_________________
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 11.03.2004, 20:42    Titel: Antworten mit Zitat

Es gibt leider wieder ein Problem:
Das Programm lässt beim kopiren % Zeichen weg.
Wenn ich also schreibe:
Code:

<table border="1" bordercolor="#8080FF" width="100%">

wird daraus nach dem kopieren:
Code:
<table border="1" bordercolor="#8080FF" width="100">

damit es richtig funktioniert müsste ich im HTMLtext
<table border="1" bordercolor="#8080FF" width="100%%">[/code]
schreiben.

Anscheinend interpretiet fgets() das als Sonderzeichen, aber es ist unakzeptabel im Quelltext immer %% schreiben zu müssen. Die logische Konsequenz wäre also komplett von
Code:
FILE *Datei=fopen("dsfg.txt", "r");
auf
Code:
ifstream Datei("dsfg.txt");
umzusteigen. Nur fehlt mir dann noch die Funktion zum schreiben von Zeilen (also das Gegneteil von getline()).

Also: Haltet ihr den Umstieg auch für sinnvoll, und wie heißt die Funktion zu schreiben von Strings in Dateien.

Wie kann ich testen ob die ifstream datei("dsfg.txt") geöffnet werden konnte?

Ist
Code:
ifstream datei("dsfg.txt");

das selbe wie:
[code]ifstream datei;
datei.open("dsfg.txt");[code];

und kann man mit dem öffnen Schreiben und lesen(man muss ja nich den Modus angeben)?[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 11.03.2004, 22:16    Titel: Antworten mit Zitat

ein ifstream ist zum lesen, zum schreiben brauchst du ein ostream. du kannst auch mit einem fstream beides gleichzeitig. ich tipp dir mal ein Beispiel aus nem Buch ab:

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
{
datei << 123;
datei.seekg(0,ios_base::beg); // An den Dateianfang gehen
int i;
datei >> i;
cout << "In " << dateiname << " steht: " << i << endl:
}
return 0;
}


noch kurz die Erklärungen zu ios_base:
in = Datei öffnen zum Lesen
out = schreiben
trunc = alten Dateiinhalt überschreiben, falls die Datei schon existiert
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 11.03.2004, 22:19    Titel: Antworten mit Zitat

Das % verschwindet weil du fprintf benutzt... die Funktionen der printf Familie benutzen das als Platzhalter. Probier mal das aus:

Code:

printf("Eine Zahl: %i", 10);


Die 10 wird für das %i eingesetzt.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.03.2004, 12:52    Titel: Antworten mit Zitat

Ist das mit dem ios_base umbeding nötig?
Bisher hab ich das ja noch nicht beutz. Reicht es wenn ich einfach statt:
Code:
ifstream Datei("text.txt")

Code:
fstream Datei("text.txt")

benutze. Dann müsste ich doch weiterhin mit.
Code:
string zeile;
while(!Datei.eof())
{
 getline(Datei, zeile);
 cout << zeile.c_str() << '\n';
}

Die Datei Zeile für Zeile lesen können. Aber wie heißt dann die entsprechende Funktion, mit der ich einen String in die Datei schreiben kann? Und wie kann ich beeinflussen, ob der String dann in eine neue Reihe (was ja geschehen müsste, wenn die Funkton das Gegenteil von getline() ist) oder an die aktuelle Zeile geschrieben wird?
getline() ließt ja meines Wissens nach die komplette aktuelle Zeile in den String, fgets() aber einer bestimmten Position(nich umbedingt am Anfang der Reihe) und in einer gewissen Länge (aber nur bis zum nächsten Zeilenumbruch).

Gibt es irgendwo vieleicht ein guten Artikel über die Textdateienverarbeitung mit fstream Objekten?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3
Seite 3 von 3

 
Gehe zu:  
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

Impressum