Boost Spirit: Kann eine rule zwei Vektoren zuruckgeben?



  • Hallo,

    ich versuche gerade ein Format zu parsen welches unter anderem folgende Angaben enthaelt:

    x1 x2 y1 x3 y2 y3 y4 x4
    

    Klappt auch ganz gut mit Boost Spirit, ich liefere am Ende ein Object zurueck das einen Vektor mit all den x- und y-Werten enthaelt, dafuer benutzte ich folgende rule:

    qi::rule<Iterator, std::vector<std::string>(), Skipper> data_values;
    
    struct data_file
    {
      std::vector<std::string> x_y_values;
    }
    

    Spaeter brauche ich die x- und y-Werte jedoch getrennt in je einem Vektor. Ich wuerde gerne folgendes Objekt zurueckgeben:

    struct data_file
    {
      std::vector<std::string> x_values;
      std::vector<std::string> y_values;
    }
    

    Wie kann man Boost Spirit mitteilen die Werte in zwei Unterschiedliche Vektoren zu speichern?

    Hat da jemand eine Idee? 🙂



  • Du kannst ein tuple<x, y> dafür benutzen. Das kann spirit auch schon "out of the box".



  • Die Daten stehen leider in keinem engen Bezug zueinander von daher moechte ich sie nicht in einem Tupel speichern.
    Die x- und y-Werte aus meinem ersten Post koennen in einem konkreten Fall so aus sehen:

    baa aa b1 bbb a33 bb bbbbb a5556
    

    Alle Woerter die mit einem "a" anfangen sollen in einem Vektor gespeichert werden und alle Woerter die mit "b" anfangen in einem anderem.
    Kann man Boost Spirit mitteilen die selbe Stelle im Textstream zweimal zu parsen und im ersten Fall nur die Woerter mit "b" am Anfang zu lesen und um beim zweiten Durchlauf nur die Woerter mit "a" am Anfang?


Anmelden zum Antworten