strukturierte Daten schreiben



  • Hallo,

    vielen Dank für Deinen ausführlichen Beitrag und das geänderte Beispiel.
    Dazu hätte ich noch eine Frage zur "structur": müsste das nicht bei C++ "class" heissen ?.

    MfG

    Juergen B.



  • @jbaben sagte in strukturierte Daten schreiben:

    Dazu hätte ich noch eine Frage zur "structur": müsste das nicht bei C++ "class" heissen ?.

    struct und class unterscheiden sich in C++ nur darin, dass in einer struct per Default alle Member public sind und in einer class alle Member per Default private sind.



  • Hallo,

    wie kann ich bei dem gezeigten Programm-Code non "john 0" Daten an die vorhandene Datei anfügen ?

    MfG

    Juergen B.



  • Hallo,

    ich habe es schon gefunden, mit:
    std::ofstream ofs(filename, std::ios_base::out | std::ios_base::app);

    MfG

    Juergen B.



  • @john-0 sagte in strukturierte Daten schreiben:

    Kunde(std::string name, std::string address1, std::string address2, float schuld, int nummer, int limit) :
    name_(name), address1_(address1), address2_(address2), schuld_(schuld), nummer_(nummer), limit_(limit)
    {}

    Warst du nicht der, der immer alle Parameter const haben wollte? Und ausgerechnet bei strings nimmst du keine const-ref? Wolltest du move'n?



  • @john-0
    Ich habe noch das Problem beim lesen und anzeigen der gespeicherten Textdatei "kunde.cvs".
    Mit dem Programm-Code:

    ifs2.open(filename_kunde, std::ios::in);
    while (ifs2 >> kunde.nummer_   >> kunde.name_  >> kunde.address1_  >> kunde.address2_  >> kunde.limit_  >> kunde.schuld_)
    {
                   std::cout << "Kunden-Nummer     = " << kunde.nummer_ << std::endl;
    		std::cout << "Kunden-Name         = " << kunde.name_ << std::endl;
    		std::cout << "Kunden-Adresse1   = " << kunde.address1_ << std::endl;
    		std::cout << "Kunden-Adresse2   = " << kunde.address2_ << std::endl;
    		std::cout << "Kunden-Limmit       = " << kunde.limit_ << std::endl;
    		std::cout << "Kunden-Schuld       = " << kunde.schuld_ << std::endl;
    }
    ifs2.close();
    

    erhalte ich keine Anzeige.
    Ich denke mal das liegt an dem Trennungszeichen ','.
    Ohne Trennungszeichen funktioniert die Anzeige (allerdings nur ohne Leerzeichen zwischen den Eingaben: z.B Adresse1 = "addresse1" und nicht: "addresse1 xy").
    Wie kann ich die Textdatei "kunde.cvs" auslesen ?

    MfG

    Juergen B.



  • Verrätst du uns auch noch, was die Probleme sind? Was erwartest du, was ist die Ausgabe?


  • Mod

    Glaskugel sagt:

     o << k.nummer_ << ",'" << k.name_ << "','" << k.address1_ << "','" << k.address2_ << "'," << k.limit_ << "," << k.schuld_ << "\n";
    

    vs.

    ifs2 >> kunde.nummer_   >> kunde.name_  >> kunde.address1_  >> kunde.address2_  >> kunde.limit_  >> kunde.schuld_
    

    Die beiden sind nicht Gegenteile voneinander.

    edit: Fragesteller hat inzwischen eine Problembeschreibung zugefügt, die Glaskugel hatte also Recht.



  • @DocShoe
    Sorry, ich hatte beim erstellen eine falsche Taste (backspace) gedrückt --> unfertiger Beitrag wurde angezeigt.

    MfG

    Juergen B.



  • @jbaben: Du kannst mittels getline(ifs2, kunde.name_, ',') den Text bis zum Komma einlesen.

    Am besten implementierst du dann den operator >> dafür und liest dann einfach per while (ifs2 >> kunde).



  • @Th69
    So wie ich das verstehe:

    std::fstream ifs2;
    ifs2.open("kunde.cvs, std::ios::in);
    while(ifs2)      // mit "while(ifs2 >> kunde) --> keine Anzeige
    {
                   //get?(ifs2, kunde.nummer_ , ',');        // da fehlt mir im Moment der Befehl um Integer zu lesen
    		getline(ifs2, kunde.name_ , ',');
    		getline(ifs2, kunde.address1_ , ',');
    		getline(ifs2, kunde.address2_ , ',');
                   //get?(ifs2, kunde.limit_ , ',');               // da fehlt mir im Moment der Befehl um Integer zu lesen
    		//get?(ifs2, kunde.schuld_);          // da fehlt mir im Moment der Befehl um Float zu lesen
    
    		std::cout << "Kunden-Nummer     = " << kunde.nummer_ << std::endl;
    		std::cout << "Kunden-Name       = " << kunde.name_ << std::endl;
    		std::cout << "Kunden-Adresse1   = " << kunde.address1_ << std::endl;
    		std::cout << "Kunden-Adresse2   = " << kunde.address2_ << std::endl;
    		std::cout << "Kunden-Limmit     = " << kunde.limit_ << std::endl;
    		std::cout << "Kunden-Schuld     = " << kunde.schuld_ << std::endl;
    	}
    	ifs2.close();
    

    funktioniert das einlesen und anzeigen nicht.



  • Hallo,

    so funktioniert das einlesen und anzeigen der Textdatei "kunde.cvs":

    std::string number = "", limit = "", schuld = "";
    ifs2.open(filename_kunde, std::ios::in);
    while(ifs2)
    	{
    		getline(ifs2, number, ',');
    		getline(ifs2, kunde.name_, ',');
    		getline(ifs2, kunde.address1_, ',');
    		getline(ifs2, kunde.address2_, ',');
    		getline(ifs2, limit, ',');
    		getline(ifs2, schuld);
    
    		// hier fehlt noch die Konvertierung "String to Integer"
                    //kunde.nummer_ = ?(number);
                    //kunde.limit_ = ?(limit);
                    //kunde.schuld_ = ?(schuld);
    
    		std::cout << "Kunden-Nummer     = " << number << std::endl;
    		std::cout << "Kunden-Name       = " << kunde.name_ << std::endl;
    		std::cout << "Kunden-Adresse1   = " << kunde.address1_ << std::endl;
    		std::cout << "Kunden-Adresse2   = " << kunde.address2_ << std::endl;
    		std::cout << "Kunden-Limmit     = " << limit << std::endl;
    		std::cout << "Kunden-Schuld     = " << schuld << std::endl;
    	}
    	ifs2.close();
    

    MfG

    Juergen B.



  • @Jockelx sagte in strukturierte Daten schreiben:

    Warst du nicht der, der immer alle Parameter const haben wollte?

    Da es es ein Beispiel fürs Forum ist, habe ich es deshalb weggelassen.


  • Mod

    @john-0 sagte in strukturierte Daten schreiben:

    @Jockelx sagte in strukturierte Daten schreiben:

    Warst du nicht der, der immer alle Parameter const haben wollte?

    Da es es ein Beispiel fürs Forum ist, habe ich es deshalb weggelassen.

    Hast Du das move(), von dem @Jockelx im nicht zitierten Teil sprach, auch weggelassen, um die Neulinge hier nicht zu verwirren? 🤨


Anmelden zum Antworten