Boost::Spirit -- Grammatik funktioniert unter Windows aber unter Linux nicht



  • Hallo,

    ich verwende eine vergleichsweise einfache Grammatik zur Implementierung eines Boost::Spirit Parsers für ein Datenformat auf Basis von CSV. Dieser Parser funktioniert tadellos unter Windows und parst jede Zeile einer CSV Datei fehlerlos. Als ich jetzt die Applikation unter Linux getestet habe, schlägt er bei jeder Zeile fehl.

    Was mich sehr überrascht, ich lese eine Datei zeilenweise aus und übergebe die dann mitsamt der Grammatik an die parse funktion:

    parse_info<> info = parse(line.c_str(), mygrammar);
    if (info.full)
    {
    }
    else
    {
       // always fails
    }
    

    Die Schlägt fehl und liefert die ganze Zeile als nicht parsebar zurück. Ich verwende die exakt gleichen CSV-Eingabedateien. Unter Windows gibt es doch z.B. andere Zeilenenden? Die

    getline(_file, line)
    

    funktioniert aber und ich verwende in meiner Grammer auch keine integral Parser, die irgendwie auf ein Zeilenende warten. Ich parse lediglich die Ausgabe der getline Funktion.

    Ich stehe ziemlich auf dem Schlau wo das Problem liegen können? Hat jemand eine Idee? Muß man bei Grammatiken unter Windows und Linux irgendwelche Unterschiede berücksichtigen? 😕

    danke



  • unter Windows hast du die Zeilenenden "\r\n" und Linux nur "\n". Das getline unter Linux kickt also nur das "\n" und du hast am Ende der zeile ein "\r" stehen.



  • Danke, das war es...


Anmelden zum Antworten