Dateien erstellen, was reinschreiben und wieder auslesen



  • C++_new_progger schrieb:

    Kann sein das was falsch is habe ich nachgelesen bin auch erst ganz neu hier!! 😉

    Joa, da sind schon einige Fehler drin 😃

    1.) <fstream> ohne .h

    2.) Keine Globalen Variablen bitte, die sind hier überhaupt nicht nötig
    (...soviel Anfänger benutzen so häufig globale variablen, ich frag mich wo das herkommt...)

    3.) Das "wasdrin" und "dateiname" zeicheKETTEN enthalten sollen, also nicht nur ein Zeichen den das passiert wenn du char schreibst, musst du sie als char[] oder besser std::string deklarieren.

    4.) Du musst out wieder schließen und zwar bevor du ein ifstream objekt erzeugst.

    5.)Deine Schleife könnte/sollte auch so aussehen 😉

    while(!in.eof())
        {
           string temp;
           in >> temp
           if(!in.eof()) cout<<temp;
        };
    

    6.) in wieder auch schließen 😉 mit in.close()

    👍

    Und zu überprüfen ob die Dateien erfolgreich geöffnet wurden, wäre auch net schlecht...



  • Freak_Coder schrieb:

    5.)Deine Schleife könnte/sollte auch so aussehen 😉

    while(!in.eof())
        {
           string temp;
           in >> temp
           if(!in.eof()) cout<<temp;
        };
    

    Warum nicht so:

    cout << in.rdbuf();
    

    ?

    6.) in wieder auch schließen 😉 mit in.close()

    Ist überflüssig. (Da dies der Dtor ebenfalls erledigt).

    Und Btw: Wenn man das Statuswort auf dem Default lässt, wird der ofstream in folgendem Modus geöffnet: ios::out|ios::trunc. => eine bestehende Datei wird auf die Länge 0 gekürzt...

    Gruß Caipi



  • Ok merke ich mir aber weiß zufällig einer ein Buch wo so was alles drin steht also auslesen von Dateien und was da alles dazu gehört also das wiklich vortgeschrittene Programmieren, weil ich habe nur so eins das nur die Grundlagen erklärt!!! :p



  • Ich mach mal den Code nochmal her bloß mit Kommentaren... schreibt dann bitte obs so richtig ist nur damit ich weiss ob ich das jetzt begriffen hab..

    int main()
    {
       cout<<"Wie soll die Datei heißen?\n";
       cin>>dateiname;  //Eingabe des Benutzers wird in Variable dateiname geschr.
    
       cout<<"Was soll drin stehen?\n";
       cin>>wasdrin;  // Eingabe wird in Variable wasdrin geschrieben
    
       ofstream out(dateiname);//öffnet(oder erzeugt?) eine datei mit dem namen
                               //des inhalts von "dateiname" 
                               //dabei ist "out" nur ein name, man kann auch z.b
                               // foo nehmen (richtig oder falsch) ?!?
    
       out<< wasdrin <<endl;  //out(oder halt foo =)) ,also die datei wird mit
                              // dem inhalt von "wasdrin" gefüllt
                              //mittels endl. wird in der datei ein return eingefügt
    
       ifstream in(dateiname);//was das macht weiss ich nicht
        while(!in.eof()) //kein plan was das soll, ich weiss nicht was eof is
        { 
           char ch;     // variable ch "erzeugt"
           ch=in.get();  //der inhalt von ch ist in.get() wobei ich nicht weiss was
                         //in.get() bedeuten soll get() ist wohl eine methode zum
                        //auslesen was in der datei steht?!?!
                       // doch wie kann ich einzelne wörter, zahlen etc der datei
                         // überprüfen?? (z.b ob FOO in der Datei steht)
           cout<<ch; //ch wird ausgegeben.
        };
    
    };
    

    bei den Sachen wo ich hingeschrieben hab bitte mal erklären was sie bewirken
    und falls Etwas falsch sein sollte, bitte korrigieren
    MfG Travis



  • C++_new_progger schrieb:

    Ok merke ich mir aber weiß zufällig einer ein Buch wo so was alles drin steht also auslesen von Dateien und was da alles dazu gehört also das wiklich vortgeschrittene Programmieren, weil ich habe nur so eins das nur die Grundlagen erklärt!!! :p

    Dieses Buch C++ lernen und professionell anwenden | ISBN: 3826615344 behandelt imho alle Grundlagen. (Dazu gehören imho Dateioperationen, Templates, etc. dazu.)

    Gruß Caipi



  • Ich glaube so ist es richtiger zumindest wenn ich Freak_Coder richtig verstanden habe(verbessert mich bitte wenn ich noch mal was falsch habe):

    #include <fstream> 
    #include <iostream> 
    using namespace std; 
    
    int main() 
    {
       char dateiname[80]; //hoffe das das so hier richtig ist
       char wasdrin[80];  //hoffe das das so hier richtig ist
    
       cout<<"Wie soll die Datei heißen?\n"; 
       cin>>dateiname; 
    
       cout<<"Was soll drin stehen?\n"; 
       cin>>wasdrin; 
    
       ofstream out(dateiname); 
    
       out<< wasdrin <<endl;
    
       out.close() 
    
       ifstream in(dateiname); 
        while(!in.eof()) 
        { 
           char ch; 
           ch=in.get(); 
           cout<<ch; 
        };
       in.close() 
    
    };
    


  • ja das is mir klar nur will ich wissen was die ganzen teile bewirken.. ich finds net sehr berauschend wenn ich sowas in meinen code schreibe und nicht weiss was einzelne sachen bewirken ^^



  • bump hab immer noch keine antwort leute haltet euch ran ^^



  • Okey probiers mal aber könnte auch was falsch sein!!:

    #include <fstream> //für ofstream und ifstream(header)
    #include <iostream> // für cout und cin(header)
    using namespace std; //damit man nicht std::cout schreiben muss
    
    int main() //Hauptschleifen
    { 
       char dateiname[80]; //Zeichenkette
       char wasdrin[80];  //Zeichenkette
    
       cout<<"Wie soll die Datei heißen?\n"; 
       cin>>dateiname; //Variable zum wissen wie die Datei heißen soll
    
       cout<<"Was soll drin stehen?\n"; 
       cin>>wasdrin; //was drin stehen soll (Variable)
    
       ofstream out(dateiname); //Zum erstellen der Datei!!!!!
    
       out<< wasdrin <<endl; //Was in der Datei stehen soll(wasdrin)
    
       ifstream in(dateiname); //Zum laden der Datei!!!
        while(!in.eof()) 
    
    /*Zum Einlesen wird ein entsprechendes Objekt der Klasse ifstream verwendet. Um nicht darauf achten zu müssen, wie viele Zeichen ausgegeben werden sollen, gibt es die Methode eof() (end of file), die angibt, ob die Datei vollständig eingelesen wurde.*/
    
        { 
           char ch;  
    
    /* die werden dann sozusagen einzel ausgelesen, bis eof keine Buchstaben mehr meldet und damit die while schleife beendet*/
    
           ch=in.get(); 
           cout<<ch; 
        }; 
       in.close() //schliesen des auslesens!!!
    
    };
    

    😉



  • und wie lese ich z.b ein bestimmtes Wort aus der textdatei?

    also z.B die Variable y hat den wert 3 und in die textdatei wir geschrieben

    y=3

    wie kann ich das jetzt auslesen?



  • Sry da habe ich auch keine Ahnung mehr ich bin ja auch neu hier sry. 😕



  • aber es wird doch irgendeiner da sein? ^^



  • [quote="Caipi"]
    Warum nicht so:

    cout << in.rdbuf();
    

    ?
    [\quote]

    😕 Weil ich rdbuf() immer irgendwie vergessen 😃
    Ich habe es auch noch nie in einem der Bücher gesehen die ich gelesen habe und auf cppreferenc steht auch nichts davon ???

    Nur auf ein paar anderen Seiten! Wieso ist rdbuf mir so unbekannt ???

    Caipi schrieb:

    (Da dies der Dtor ebenfalls erledigt).

    Cool wusste ich gar nicht 😃



  • C++_new_progger schrieb:

    /*gibt es die Methode eof() (end of file), die angibt, ob die Datei vollständig eingelesen wurde.*/
    

    --> Die true zurückliefert wenn der Dateizeiger am Ende der Datei angekommen ist 😉



  • hat den keiner eine antwort auf die Frage wie ich Variablen aus z.B einer txt Datei auslesen kann?



  • Du musst doch nicht hier dauernd nachfragen, wieso du keine Antwort bekommst.
    Wir haben WE und da kann dir nicht jeder sofort schreiben, das braucht halt seine Zeit...

    Zu deiner Frage:
    Du weist doch jetzt wie du ein Wort in einer Datei reinschreibst und jetzt willst du ja ein Wort aus der Datei auslesen...

    Demnach machst du genau das umgekehrte von dem wie du ein Wort reingeschrieben hast, so schwer kann das ja jetzt nicht mehr sein...

    Oder meintest du was anderes ?



  • Also im Code steht ne Variable... z.B: "zahl1 = 0"

    in der Textdatei steht jetzt

    "zahl1 = 4"

    wie überprüfe ich jetzt welchen Wert zahl1 in der txt Datei hat?

    also die variable zahl1 im code soll genau den wert bekommen wie zahl1 in der textdatei... im Beispiel hätte die zahl1 aus dem Code also dann den Wert 4

    stell dir vor ich habe ein programm in der der benutzer speichern will, welche zahl er eingegeben hat... in einer textdatei

    dann startet er das programm neu, und das Programm soll die Textdatei auslesen und dann zahl1 im code auf den werte der zahl1 - variable aus der Textdatei setzen



  • Naja, mit ein bissl überlegung und der FAQ solltest du das eigentlich selber hinkriegen...

    ...
    string temp;
    int zahl1 = 0;
    
    in >> temp;  // zeichenkette "zahl1" wird gelesen
    in >> temp;  // zeichen "=" wir gelesen
    in >> zahl1; // die zahl wir eingelesen und direkt zahl1 zugewiesen
    ...
    

    Es gibt noch tausendandere möglichkeiten aber diese sollte reichen ...



  • und wie macht man es wenn in einer Datei mehrere Variablen stehen (sonst müsste ich für jede Variable ja eine eigene Datei anlegen _)



  • Es gibt eine elegante Methode!
    Man muss sich nur ein wenig mit dem printf format auskennen...is nich schwer
    sagen wir mal in der datei steht zahl1 = 4

    int val;
    FILE* pFile = fopen("file.txt" , "r+"); // open file.txt for read/write
    fscanf(pFile , "zahl1 = %d" , &val);
    fclose(pFile);
    
    /* val == 4 */
    

Anmelden zum Antworten