000
12.09.2004, 18:35 Uhr
~Dani
Gast
|
Dieses Problem hindert uns nun noch daran, unser Projekt fertig zu stellen:
Wir haben eine Textdatei die beim Programmstart ausgelesen und in einem Vector gespeichert werden soll.
Die Textdatei besteht aus Wörtern, die durch eine Raute getrennt werden. Wir lesen also immer von Raute zu Raute. Der Einlese-Vorgang geschieht in einer while-Schleife. Das Problem ist nun, dass die while-Schleife trotz der Anweisung while(dh.good()) auch bei einer leeren Textdatei einmal durchlaufen wird. Und wenn in der Textdatei eigentlich soviel drinsteht, dass die Schleife mehrmals durchlaufen werden müsste, wird die while-Schleife auch (nur) einmal durchlaufen... Wir haben schon hin und her probiert, wissen aber nicht woran es liegen könnte... while(!dh.eof()) haben wir auch schon ausprobiert. Hier mal ein code-ausschnitt:
C++: |
vector<Medium*> mainVec;
char test[100000];
vector<Medium*> getMainVec() { return mainVec; }
void readCdAudio() { // Textdatei cdAudio.txt auslesen ifstream dh ("cdAudio.txt"); if(!dh) { cerr << "cdAudio.txt konnte nicht geöffnet werden!" << endl; exit(-1); } while (dh.good()) { CdAudio *cda = new CdAudio(); bool isBoot = true; bool lent = true; bool isSingle = true; dh.getline(test, 100000, '#'); string interpret = test; cda->CdAudio::setInterpret(interpret); dh.getline(test, 100000, '#'); string title = test; cda->CdAudio::setTitle(title); dh.getline(test, 100000, '#'); string id = test; cda->CdAudio::setId(id); dh.getline(test, 100000, '#'); string length = atoi(test); cda->CdAudio::setLength(length); dh.getline(test, 100000, '#'); if (test[0] == '0') { isBoot = false; } cda->CdAudio::setIsBoot(isBoot); dh.getline(test, 100000, '#'); string genre = test; cda->CdAudio::setGenre(genre); dh.getline(test, 100000, '#'); string place = test; cda->CdAudio::setPlace(place); dh.getline(test, 100000, '#'); if (test[0] == '0') { lent = false; } cda->CdAudio::setLent(lent); dh.getline(test, 100000, '#'); string lentByName = test; cda->CdAudio::setLentByName(lentByName); dh.getline(test, 100000, '#'); string lentByMail = test; cda->CdAudio::setLentByMail(lentByMail); dh.getline(test, 100000, '#'); int releaseYear = atoi(test); cda->CdAudio::setReleaseYear(releaseYear); dh.getline(test, 100000, '#'); string comment = test; cda->CdAudio::setComment(comment); dh.getline(test, 1, '#'); if (test[0] == '0') { isSingle = false; } cda->CdAudio::setIsSingle(isSingle); cda->CdAudio::setType("Audio-CD"); setMainVec(cda); } dh.close(); }
|
Wir wären echt dankbar wenn jemand helfen könnte... |