Frage zur Formatierung



  • Hallo

    Lese Daten von einem GPS Empfänger ein und will diese in eine TXT Datei speichern.

    Meine Frage wie kann ich die Daten Protokolle formatieren.

    Das Startzeichen ist ein $ das Ende Zeichen ein LF.

    So kommen die Daten jetzt and

    213123,821312 E,1313,12312,123123,1*49
    3312GMC3313121312N,w12312312E,3123,,,,,,12321,,,87GMC3313121312N,w12312312E,3123,,,,,,12321,,,*87 RMC13112312,123,,,12312,3,,,12312,,,,,*4D
    usw.

    So solls dann ausehen

    GMC3313121312N,w12312312E,3123,,,,,,12321,,,87GMC3313121312N,w12312312E,3123,,,,,,12321,,,*87 RMC13112312,123,,,12312,3,,,12312,,,,,*4D
    $VTG123123,12312,3,21,312,3,123,*6T

    usw.

    Vielen Dank

    Herrmann



  • Du kannst die Daten in einem String speichern und dort nach $ bzw \n suchen, um die richtigen Teile auszuschneiden.



  • Hallo Herrmann,

    Du kannst die Zeichen von einem Pacman fressen lassen 😉

    #include <iostream>
    
    class Pacman
    {
    public:
        enum state_t { idle, store };
        Pacman( std::ostream& out ) : m_state( idle ), m_out( out ) {}
        void friss( char z );
    private:
        state_t m_state;
        std::ostream& m_out;
    
        static const char start = '$';
        static const char end = '\n';
    };
    
    void Pacman::friss( char z )
    {
        switch( m_state )
        {
        case idle:
    
            if( z == start )
            {
                m_out << z;
                m_state = store;
            }
            break;
    
        case store:
            if( z == end )
            {
                m_state = idle;
                m_out << std::endl;
            }
            else
            {
                m_out << z;
            }
            break;
        default:
            // ???
            break;
        }
    }
    

    kleines Test-Programm dazu:

    #include <algorithm>
    #include <functional>
    #include <fstream>
    
    int main()
    {
        using namespace std;
        const char input[] = 
            "213123,821312 E,1313,12312,123123,1*49\n"
            "3312$GMC3313121312N,w12312312E,3123,,,,,,12321,,,*87\n"
            "$RMC13112312,123,,,12312,3,,,12312,,,,,*4D\n"
            "$VTG123123,12312,3,21,312,3,123,*6T\nquatsch";
        ofstream file("output.txt");
        Pacman pac( file );
        for_each( input, input + strlen(input), bind1st( mem_fun( &Pacman::friss ), &pac ) );
        return 0;
    }
    

    :xmas2: Werner

    Edit: break vergessen ...



  • Habe es danke urer hilfe hinbekommen.

    Vielen Dank

    Herrmann


Anmelden zum Antworten