Daten aus txt datei in Klasse einlesen



  • @PardiMau sagte in Daten aus txt datei in Klasse einlesen:

    Und leider kann ich mir das Format der txt nicht aussuchen...

    Ja was denn nun? Kanst du das Datenformat frestlegen oder nicht? Die Dateiendung spielt dabei überhaupt keine Rolle.



  • @PardiMau Da die Diskussion ja in alle möglichen Formatbereiche abgeschwiffen ist - wie ist denn jetzt dein Stand? Wo stehst du, kommst du klar - wenn nein, hast du konkrete Probleme? Es hilft dir ja nicht, wenn wir hier alle weiter irgendwas mutmaßen.



  • @wob

    #include "pch.h"
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <iomanip>
    #include <vector>
    
    using namespace std;
    using std::string;
    
    struct person
    {
    	string Identifikationsnummer;
    	string Name;
    	string Adresse;
    	string Geburtsjahr;
    	vector<string> Eltern;
    	vector<string> Kinder;
    };
    
    int main()
    {
    	//Datei einlesen
    	ifstream in("Datei.txt");
    	
    	vector<person> persons;
    
    	string lines[6];
    
    	while (true)
    	{
    		
    		for (auto& z : lines)
    			getline(in, z);
    		if (!in)
    			break; // Es konnte kein weiterer Datensatz gefunden werden
    		cout << setw(25) << "Identifikationsnummer: " << lines[0] << endl;
    		cout << setw(25) << "Name: " << lines[1] << endl;
    		cout << setw(25) << "Adresse: " << lines[2] << endl;
    		cout << setw(25) << "Geburtsjahr: " << lines[3] << endl;
    		cout << setw(25) << "Eltern: " << lines[4] << endl;
    		cout << setw(25) << "Kinder: " << lines[5] << endl;
    	
    		person{ lines[0],lines[1],lines[2],lines[3]};
    
    		cout << person{};
    	}
    

    Von dem hinzugefügten Adresse nicht beirren lassen, das ist einfach nur ein zusätzlicher string.

    Leider habe ich Probleme mit der Ausgabe. Was habe ich denn da falsch gemacht?



  • @PardiMau sagte in Daten aus txt datei in Klasse einlesen:

    habe ich Probleme

    ist keine Fehlerbeschreibung.



  • @PardiMau sagte in Daten aus txt datei in Klasse einlesen:

      person{ lines[0],lines[1],lines[2],lines[3]};
    
      cout << person{};
    

    Von dem hinzugefügten Adresse nicht beirren lassen, das ist einfach nur ein zusätzlicher string.

    Leider habe ich Probleme mit der Ausgabe. Was habe ich denn da falsch gemacht?

    Was denkst du denn tun diese 2 Zeilen?



  • @Tyrdal

    person{ lines[0],lines[1],lines[2],lines[3]};
    

    ich dachte, ich befülle die die struktur mit den zeilen, die da rein gehören

    und die zeile darunter ist wahrscheinlich quatsch, weil nicht angegeben wurde, was genau ausgegeben werden soll



  • @PardiMau Mit der Zeile erzeugst du eine unbenannte Instanz der Klasse person mit den Daten. Diese unbenannte Instanz benutzt du danach aber nicht mehr. Wenn du mit Warnungen kompilieren würdest, hätte der Compiler die das auch gesagt.

    Und das cout? Hier versucht du eine leere Instanz der person zu übergeben? An sich schon falsch. Aber woher soll cout eigentlich wissen was es mit person anfangen soll. Dafür musst du schon was tun.



  • @Tyrdal

    Ich habe jetzt alle Warnungen anzeigen lassen und da steht leider nichts zur benannten Zeile.

    Ich will natürlich keine unbenannte Instanz erzeugen, ich will eigentlich nur sagen, dass zur ID alle lines [0] gehören usw. Wie kann ich dem Programm denn sonst sagen, was in die struktur kommt?
    Und wenn ich dann einen vector<person> habe, ist der erste Eintrag dann auch automatisch die ersten 6 Zeilen?



  • Dann erzeuge eine Variable davon und gib diese dann aus.

    PS: Hast du denn überhaupt schon eine Ausgabefunktion für die Struktur person erstellt? Denn sonst sollte eigentlich eine Fehlermeldung kommen...



  • @PardiMau sagte in Daten aus txt datei in Klasse einlesen:

    Und wenn ich dann einen vector<person> habe, ist der erste Eintrag dann auch automatisch die ersten 6 Zeilen?

    Natürlich nicht.

    person p{ lines[0],lines[1],lines[2],lines[3]};
    cout << p;
    persons.push_back(p);
    

    Wobei hier für Eltern und Kinder vermutlich nicht das geschieht, was du erwartest. Aber das ist eine andere Baustelle.



  • @PardiMau Ich habe den Eindruck, du weißt nicht wie man auf die member vons structs/classes zugreift.

    // Hinweis: in structs sind alle member erstmal public, also von direkt von außen zugreifbar
    struct Foo
    {
      int  _i = 0;
    };
    
    int main()
    {
      Foo foo; // lege Variable foo vom Typ struct Foo an (per implizitem Default Konstruktor)
      int num = foo._i; // lese den member _i
      ++num;
      foo._i = num; // schreibe den member i
    }
    

    Lies mal nach wie Konstruktoren funktionieren und was streams in c++ sind (cout ist einer davon).



  • Heyho, ich habe mein Problem lösen können 🙂
    Danke für die Hilfe



  • @PardiMau

    Ja, dann zeig mal 🙂


Anmelden zum Antworten