strtok



  • Hallo!

    Auch auf die Gefahr hin, dass einige Forumbenutzer aufschreien, wenn sie das Wort "strtok" lesen, aber ich habe im Forum nichts vergleichbares gefunden, was mir zur Loesung meines Problem hilft.

    Also ich programmiere mit dem Microsoft Visual Editor C++ (nur Konsolenanwendung)

    Ich habe eine Datei, die ich zeilenweise einlesen moechte und die Zeilen und die Spalten wuerde ich gern in ein Array schreiben.

    Eine Zeile z.B. der Datei sieht so aus:
    "14.09.2004;a;12345;C:\Url\Pfad\Datei.dat;;;;;;0,23;;0,55;;;;;;;0,56"

    Ich moechte die Zeile zerteilen und wie oben erwaehmt in einem Array speichern.
    Mein Problem ist, wenn ich das mit "strtok" mache, dann bekomme ich keine Rueckgabe fuer die Spalten, in denen nichts steht. Also wenn halt zwei ";" aufeinanderfolgen.
    Ausserdem kann ich das letzte Element der Zeile nicht greifen, weil danach kein ";" mehr kommt. Es gibt aber Zeilen, in denen am Schluss noch ein ";" steht.
    Ich habe mir schon ueberlegt, ob ich nicht in allen Zeilen am Schluss einfach ein ";" anfuege, um es besser auswerten zu koennen, aber das darf ich nicht, wegen eiener anderen Verwendung der Datei.

    So, jetzt mal Code;

    ....
        char stringfjr[] =14.09.2004;a;12345;C:\Url\Pfad\Datei.dat;;;;;;0,23;;0,55;;;;;;;0,56";
    
    	char seps[]   = ";";
        token = strtok( stringfjr, seps );	
        while( token != NULL )
    	{
    		cout << token << endl;
    		token = strtok( NULL, seps );
    	}
    ...
    

    Kann mir bitte jemand Hilfestellung zu obigen Problem geben:
    - Auswertung der Spalten und Speicherung in einem Array arr[zeile][spalte]
    - Letztes Elemet trotz fehlende ";" ermitteln



  • boost::tokenizer ist das was du brauchst, der regelt alles, sodass du am ende nurnoch die einzelnen token abfragen musst(über iteratoren, dh die token werden auch alle gespeichert)

    @fubar schneller :p




Log in to reply