title image


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



OK, mal ein paar (ungetestete!) Codeschnipsel (keine "Musterlösung" - es geht immer noch anders, und meistens auch noch besser). Diese beziehen sich jetzt auf char[]s, aber mit strings könnte man das einfacher und eleganter machen!



Z.B. könntest du Konstruktoren machen, die ein Personal oder einen Kunden aus den benötigten Werten erstellt.



CPersonal(char *vor, char *nach, int nummer) {

strcpy(Vorname, vor);

strcpy(Nachname, nach);

PersNr = nummer;

}







Dann kannst du nacheinander jeweils die Daten für eine Person aus der Datei lesen, und für daraus jeweils ein Objekt erstellen. Die Objeke können z.B. in einem vector liegen



Einige werden jetzt sagen, daß das "schlecht" ist, aber es hat einige Vorteile: In dem Vector könnten Zeiger auf Personen liegen:



#include <vector>

...

vector<CPerson*> personen;





Um die Zeilen aus der Datei zu lesen, könnte man eine Hilfsfunktion verwenden:



// Lies aus der Datei, bis zum ersten Leerzeichen, und schreibe in 'ziel'

// (nicht schön, abes so ungefähr müßt's funktionieren)

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

int i = 0;

do {

ziel[i] = datei.get();

if (ziel[i]==' ') {

ziel[i]=0;

break;

}

i++;

}while (!datei.eof());

}



(mit strings wäre das schon mit

datei >> meinString;

erledigt...)



Diese Funktion kann man verwenden, um die Zeilen zu lesen. Wenn man eine Zeile gelesen hat, wird ein passendes CPersonal-Objekt angelegt.



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

datei.open(Dateiname);

while(!datei.eof())

{

// eine Zeile lesen

lies(datei, vorname);

lies(datei, nachname);

lies(datei, nummerString);



int nummer = atoi(nummerString);



// Person erstellen und in vector legen:

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

personen.push_back(personal);

}

datei.close();







Auf die Personen, die dann in diesem Vector liegen, kann man genau so zugreifen, wie auf Zeiger in einem Array:



printf("%s\n", personen[3]->Vorname); // Vornamen der 3. Person ausgeben

...



strcpy(personen[3]->Vorname, "NeuenName"); // Namen der 3. Person ändern

...



// Person 2 und Person 5 vertauschen:

CPerson *temp = personen[2];

personen[2] = personen[5];

personen[5] = temp;

...







Um den Vektor zu sorteren kannst du entweder den C++-eigenen sort-Algorithmus verwenden - allerdings muß man entweder mit den Personen LessThanComparable implementieren, oder einen eigenen Comparator schreiben - oder mal nach "BubbleSort" oder so googlen, und dir überlegen, die man das für diesen Fall enwenden kann...



Kannst ja mal schauen, wie weit du damit kommst, und ggf. dann nochmal (möglichst etwas genauer!) nachfragen, was noch unklar ist oder was nicht funktioniert.



bye



P.S Wegen der Mail-Benachrichtigung wäre es besser, auf den Post zu antworten, auf den man sich bezieht.







geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: