Daten speichern & auslesen



  • Hi an alle.

    Habe mir die Beiträge hier komplett durchgelesen.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39469.html

    Wollte das vierte Beispiel versuchen. (Datei erstellen, Daten speichern, Daten ausgeben)

    Hier mal der Code

    #include <iostream>
    #include <fstream>
    #include <string>
    int main()
    {
            using namespace std;
    
            // Einen Person-Datensatz definieren
            struct PERSON
                    {
                    string VorName;
                    string NachName;
                    int TelNr;
            };
    
            // fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann.
            fstream File("Person.txt", ios::out|ios::binary);
            File.open("Person.txt", ios::out|ios::binary);
            if (File.is_open())
            {
                    // Nur zwei Datensätze schreiben. - Hier wäre eine Fehlerprüfung angebracht
                    for (int i = 0; i < 2 ; ++i)
                    {
                            PERSON Pers;
                            while (File.read((char*)&Pers, sizeof(Pers)))
                            {
                                    cout << "Daten werden aufgerufen..." << endl;
                                    getchar();
                                    cout << Pers.VorName << " " << Pers.NachName << " " << Pers.TelNr << endl;
                                    getchar();
                            }
                    }
                    File.close(); // Datei schließen
            }
            return 0;
            getchar();
    }
    

    Beim ersten Durchgang werden die Daten gespeichert. Also man muss VorName, NachName und TelNr ausfüllen. Später werden sie in die Datei Person.txt gespeichert.

    Aber ich kann die gespeicherten Daten nicht auslesen.
    Hier mein Code dazu:

    #include <iostream>
    #include <fstream>
    #include <string>
    int main()
    {
            using namespace std;
    
            struct PERSON
                    {
                    string VorName;
                    string NachName;
                    int TelNr;
            };
    
            fstream File("Person.txt", ios::out|ios::binary);
            File.open("Person.txt", ios::out|ios::binary);
            if (File.is_open())
            {
                    for (int i = 0; i < 2 ; ++i)
                    {
                            PERSON Pers;
                            while (File.read((char*)&Pers, sizeof(Pers)))
                            {
                                    cout << "Daten werden aufgerufen..." << endl;
                                    getchar();
                                    cout << Pers.VorName << " " << Pers.NachName << " " << Pers.TelNr << endl;
                                    getchar();
                            }
                    }
                    File.close();
            }
            return 0;
            getchar();
    }
    

    Ich will die Daten auslesen können. Bring die Sache aber alleine nicht hin. Also bitte hilft mir mal. 👍

    Danke im Voraus.

    MfG
    Technology



  • Hast du dir den Code, den du gepostet hast eigentlich auch mal angesehen?

    In keinem der beiden Fälle schreibst du was (auch wenn die Kommentare im ersten Code dies behauptet: "// Nur zwei Datensätze schreiben. - Hier wäre eine Fehlerprüfung angebracht"), und trotzdem öffnest du in beiden Fällen die Datei zum Schreiben (ios::out).

    Versuchs doch mal beim zweiten Beispiel, wo du lesen willst, mit ios::in.



  • Ja, hab mir den Code öfterst angeschaut aber habe so etwas zum erstenmal versucht.

    Aber danke, jetzt hats geklappt. Danke 🙂

    Zwei Fragen hätte ich noch dazu:
    1. Die Ausgabe ist so:

    Markus Steinbacher 00491601707050
    

    Die Formatierung ist leider nicht wirklich übersichtlich. Könnte ich diesen Text irgendwie schöner formatieren?

    **2.**Telefonnummer:
    Wenn ich die Telefonnummer 00491601707050 eingebe bekomme ich dann so eine Ausgabe:

    Vorname: Nachname: TelNr: Markus Steinbacher 2147483647
    Markus Steinbacher 4223172
    

    Reicht INT dazu nicht aus? Ein anderer Datentyp vielleicht für diese TelNummern?

    Ich danke mal im Voraus

    MfG
    Technology



  • Für Telefonnummern ist int sowieso nicht die richtige Wahl (erstens ist es womöglich nicht groß genug, zweitens unterstützt es keine führenden Nullen und Vorwahl-Abtrennungen und drittens willst du mit Telefonnummern nicht rechnen ;)). Pack die Tel. lieber in einen String und teste selber, ob da kein "falsches" Zeichen dazwischengerutscht ist.


Anmelden zum Antworten