title image


Smiley Re: zeilen auslesen und löschen in einer txt
Hi



Das wäre dann doch ein Kontruktor mit Parameter wie hier erklärt wird:...

Ja, das ist zufällig genau das gleiche - statt Bezeichnung und Strichcode werden hier dann eben Vorname und Nachname (und ggf. Personalnummer) übergeben.

(Es gibt, wie gesagt, immer noch andere Möglichkeiten, aber so ein Konstruktor würde hier schon Sinn machen)







Der vector ist praktisch fast das gleiche wie ein Array - nur daß bei einem vector beliebig viele Elemente hinzugefügt und wieder gelöscht werden können (man braucht nicht vorher die Größe anzugeben)

CPerson *personen[10]; // Kann nur 10 Personen-Zeiger aufnehmen

vector<CPerson*> personen; // Kann beliebig viele Personen aufnehmen



Man kann z.B. einen Vector anlgegen, und drei Personen-Zeiger reinlegen:



vector<CPerson*> personen;

personen.push_back(new CPerson(...Paramter...));

personen.push_back(new CPerson(...Paramter...));

personen.push_back(new CPerson(...Paramter...));



Und dann z.B. die 1. und die 3. person vertauschen (so, wie im letzten Post beschrieben). Man kann natürlich auch abfragen, wieviele Personen im vector sind:

for (int i=0; i<personen.size(); i++) { /* Alle Personen durchgehen */ }







Beim Auslesen der Personen aus der Datei gibt es sehr viele Möglichkeiten. Dieser Vorschlag, der im letzten Post beschrieben ist, sollte hauptsächlich das Prinzip verdeutlichen, und vielleicht ein paar Anhaltspunkte geben, "was man hinschreiben muß". Trotzdem ist erstmal nicht klar, wie das insgesamt strukturiert werden soll. Soll z.B. die Sortierung und die Möglichkeit zur Änderung in einer eigenen Klasse stehen? Die einfachste (aber auch bei weitem NICHT schönste!!!) Möglichkeit wäre, das alles als Funktionen über die main zu schreiben:



--- Datei mit der main() ---



...// includes....

#include <vector>

#include "CPerson.h"





void lies(ifstream &datei, char *ziel) {

... // siehe vorigen post

}



void liesPersonal(char *Dateiname, vector<CPersonal> &personal) {



// Code fast wie aus dem letzten Post:

char vorname[30],nachname[30],nummerString[30];

ifstream datei(Dateiname);

while(!datei.eof())

{

// eine Zeile lesen

lies(datei, vorname);

lies(datei, nachname);

lies(datei, nummerString);



int nummer = atoi(nummerString);



// Personal erstellen und in vector legen:

CPersonal *personal = new CPersonal(vorname, nachname, nummer);

personal.push_back(personal);

}

datei.close();

}





int main() {



vector personal;

char* Dateiname = "Personal.txt";

liesPersonal(Dateiname, personal);



cout << "Anzahl gelesener Personen: " << personal.size() << endl;

cout << "Name der 3. Person: " << personal[2]->Vorname << endl;

...

}





Nochmal: Das ist von der Struktur her NICHT "schön", sondern eher "schnell hingeschrieben". Man könnte das wirklich sehr "sophisticated" machen, indem man z.B. den >>-Operator überlädt. Das wäre ein bißchen kompliziert, aber dafür könnte man dann einfach mit

datei >> einePerson;

eine Person aus der Datei lesen, und man könnte mit einer einzigen Zeile die gesamte Datei in einen vector lesen. Auch bräuchte man dann nichtmehr "von außen" zu entscheiden, ob man Personal oder Kunden einlesen will. Aber ich vermute, daß Operatorenüberladung, Polymorphie usw. noch nicht behandelt wurde...!?



bye









geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: