Zeile einer Textdatei speziell strippen
-
Guten Tag,
ich hatte schon öfters Probleme mit C++, die ich aber dank der Suchfunktion immer bisher lösen konnte...doch nun hilft auch sie mir nicht mehr weiter.

Es geht um folgendes Problem:
Ich arbeite an einer MP3-Verwaltung, welcher die spezifischen Infos einer MP3 in der gewünschten Textdatei in einer Zeile in diesem Format abspeichert:interpret;titel;album;laenge;genre;
Jedoch häng ich nun an dem Problem, diese Zeile so zu strippen, dass ich sie nachher auch wieder schön sortiert, also "Interpret: blabla" etc., ausgeben kann.
Mein bisheriger Versuch sah folgend aus:
Verwaltung.open(datei_ein.c_str(), ios::in); char c; string aktuell,daten[15]; do { for(int i=0;i<5;i++) { Verwaltung.get(c); if (c!=';') { aktuell+=c; } else { daten[i] = aktuell; aktuell = ""; } } }while(!Verwaltung.eof()); Verwaltung.close(); for (int i=0;i<5;i++) {cout<<daten[i]<<endl; }Klappt soweit auch, nur sieht die Ausgabe bisher folgend aus:
titel
albumlaenge
genreUnd wie man sieht, fehlt da der Interpret, weshalb auch immer.

Woran kann das liegen? Ich konnte es mir bisher nicht erklären.
Vielen Dank schonmal im Voraus,
Sven
-
Hi,
ich würd interpret;titel;album;laenge;genre; in eine Struktur speichern und dann einfach strukturweise die Datei einlesen.Oder benutz doch für schreiben:
fprintf( fp, "%s %s %s", "interpret", "titel", "usw..." )
lesen:
fscanf ( fp, "%s %s %s", "interpret", "titel", "usw..." )Gruß,
p.
-
ihh, fprintf gehört zu C.
in c++ gibt es std::fstream:
// Wenn datei so aussieht Toxoplasma;Razzia;Monsters of Bullshit;2:57;Punk // und weitere zeilen dann: std::ifstream in("sammlung.txt"); while(in.good()) { std::string line; std::getline(line, in); while(line.find(';') != line.npos) std:.cout << line.substr(0,line.find(';') << endl }ungetestet nur schnell hingekritzelt
es gibt auch noch boost::tokenizer , hier vielleicht ein bisschen overkill. Aber ich benutz ihn igentlich immer für sowas. Aber dafür boost zu installieren lohnt sich nciht.
-
vielen dank für eure schnelle antworten, aber ich habs in der zwischenzeit über was andres gelöst bekommen, was für mich noch kompfortabler ist

wer interesse dran hat.
for (int i=0;i<(i+1);i++) { datei >> buffer; if(buffer !="") { pos1=buffer.find(';'); feld[i].interpret= buffer.substr(0, pos1); pos2=buffer.find(';', pos1+1); feld[i].titel=buffer.substr(pos1+1, pos2-pos1-1); pos3=buffer.find(';', pos2+1); feld[i].dauer=buffer.substr(pos2+1, pos3-pos2-1); pos4=buffer.find(';', pos3+1); feld[i].album=buffer.substr(pos3+1, pos4-pos3-1); pos5=buffer.find(';', pos4+1); feld[i].genre=buffer.substr(pos4+1, pos5-pos4-1); } else { break; } }