Daten aus TXTdatei in Attribute von Objekte abgeleitete Klassen speichern.



  • Hi Freunde des Denksports,

    habe folgendes Problem.

    Ich habe eine TXT Datei mit folgendem Inhalt.

    p 123 Schütte H-Darmstadt 100.12
    f 457 SAP Walldorf -100.45
    f 156 SoftwareAG Darmstadt 1000
    p 321 Lopez Chicago 100000
    f 234 Hans frankfurt 34

    Diese Daten sollen jetzt in die Atrribute der Objekte von Abgeleiteten Klassen gespeichert werde.

    Basisklasse sieht so aus:

    class CBasis  
    {
    public:
    	CBasis();
    	virtual ~CBasis();
    
    private:
    	int kundennummer;
    	string kundenname;
    	string adresse;
    	string kundengruppe;
    	double saldoallerkontendeskunden;
    
    };
    

    Von der Basiskl. wird abgeleitet und jenachdem ob in der txtdatei an ersten stelle f oder p steht sollen die daten in attributen der objekte von den abgeleiteten klasse (C_abgeleitet_F und C_abgeleitet_P) gespeichert werden.
    wir haben ein array von zeigern auf die basisklasse:

    CBasis *pt[4];

    ich hoffe das war einigermaßen verständlich.

    thx



  • Ich würde in diese Richtung ansetzen:
    Die Basisklasse (oder eine ihr zur Seite gestellte Factoryklasse) erzeugt abhängig von diesem Buchstaben die Ableitungen

    class CBasis {
      static CBasis* CreateKunde(char zeichen);
      /* ... */
    };
    
    CBasis* CBasis::CreateKunde(char zeichen)
    {
      switch (zeichen) {
      case 'p': return new CKundeP();
      case 'f': return new CKundeF();
      }
    }
    
    /* ... */
    pt[0] = CBasis::CreateKunde(zeile[0]);
    pt[0]->parse(zeile.substr(2));
    

    Wobei es natürlich geschickt wäre wenn parse eine Methode ist die die gemeinsamen Attribute ausliest und den Rest dann an eine abstrakte Methode (parseSpecific z.B.) weitergibt.



  • danke für deine antwort.
    dein ansatz passt zu meiner gewollten umsetzung leider nicht.

    vllt kannst du mir sagen, wie ich aus der txt datei jeweils bis zum leerzeichen auslesen kann und beim umbruch den pointer weietr setzt.

    also verständlich gezigt so zb.
    pt[0]->kundennummer=ausgelesene 2. stelle;
    pt[0]->kundenname=ausgelesene 3. stelle;
    ....
    umbruch
    .....
    pt[1]->kundennummer=ausgelesene 2. stelle;
    pt[1]->kundenname=ausgelesene 3. stelle;



  • Der operator>> liest bis zum nächsten Whitespace (Leerzeichen, Enter, Tab etc), getline() liest eine komplette Textzeile bis zum Enter.



  • ok danke.
    komme aber irgendwie net weiter.

    weiss jmd, wie ich zb das erste wort in einer text datei in ein attribut(typ=string) von einem objekt speichere?


Anmelden zum Antworten