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
    album

    laenge
    genre

    Und 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;
              }
      }
    

Anmelden zum Antworten