Wie die Startposition eines Tokens in einer Datei feststellen?



  • Das Problem ein bisschen vereinfacht dargestellt möchte ich eine Datei einlesen, jedes Token in einem String zwischenspeichern und anschließend mit Startpostition und Länge ausgeben. Das ist ja so relativ einfach möglich:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    int main()
    {
        std::ifstream IN;
        IN.open("test.txt");
        while(IN.good())
        {
            std::string str;
            IN >> str;
            int POSITION = 0; // ????
            // Jedes Token aus der Datei mit Startposition und Länge ausgeben
            std::cout << str << " [" << POSITION << "|" << str.length() << "]\n";
        }
        IN.close();
    }
    

    Nur wie kann ich die Startposition des strings in der Datei feststellen?? Irgendwie mit Adressen abziehen oder so, oder gibt es da was eingebautes für die Streams? Oder muss ich wirklich per hand alle Tokenlängen aufaddieren usw..? Das wär doof, denn was passiert dann bei Doppelleerzeichen, Zeilenumbrüchen usw...!?

    In dem obrigen Testprogramm sollte die Ausgabe für eine Datei mit:

    Dies ist eine Testdatei
    

    so aussehen:

    Dies[1|4]
    ist[6|3]
    eine[10|4]
    Testdatei.[15|10]
    

    Ich hoffe da gibt es eine einfache Lösung,
    Vielen Dank!


  • Administrator



  • vielen dank für die schnelle antwort, ich probier es direkt mal aus 🙂



  • nur falls das hier nochmal jemand liest,
    so klappt das jetzt, danke nochmal:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    int main()
    {
    	std::ifstream IN;
    	IN.open("test.txt");
    	while(IN.good())
    	{
    		std::string str;
    		IN >> str;
    		std::cout << str << " [" << int(IN.tellg()) - int(str.length()) + 1 << "|" << str.length() << "]\n";
    	}
    	IN.close();
    }
    

Log in to reply