Tabelle in Arrays lesen, auswerten und ausgeben...



  • Hallo Gemeinde,

    gleich vorweg will ich mal sagen dass ich in C und C++ noch ganz am Anfang stehe. Ich kann zwar den Code einigermaßen verstehen, aber selber schreiben klappt noch nicht so... 😞
    Aber Übung macht den Meister 😉

    Dann will ich mal versuchen mein Problem zu erklären:

    Ich bin dabei für einen PPC ein Linux mit GUI zu kompilieren. Genau genommen ist das Ganze für einen Digitalreceiver.
    Auf dem System läuft im Hintergrund ein Dämon der mir temporär eine Datei erstellt in der Tabellarisch Informationen zu dem Programm abgelegt werden.

    Hier mal ein Auszug aus der Datei (IPs geändert):

    1 cc.domain.de 101.101.101.101 23AC 2.02
    1 cc.ath.cx 202.202.202.202 7735 2.02
    0 192.168.1.11 192.168.001.011 8AB9 0.00
    

    Die 1 bzw 0 die ganz vorne in jeder Zeile stehen geben an ob der User online (1) bzw offline (0) ist. Danach kommt eine Spalte mit der Domain (DynDNS) und danach eine Spalte mit der aktuellen IP. Darauf folgt eine Spalte mit einer 2Byte ID (z.B. 230C) und zum Schluss noch eine Versionsangabe.

    Nun habe ich mir folgendes alz Ziel gesetzt:

    Ich lese Spalte für Spalte und Zeile für Zeile, werte sie aus, und gebe dann entsprechende Daten auf dem Bildschirm aus, etwa so (selbst modifiziertes Bild):

    http://img117.imageshack.us/img117/5360/test7dk.jpg

    Also wenn jemand online ist, dann bekommt der vorne einen grünen Punkt, andernfalls einen roten. Danach kommt dann die Domain usw...

    Mein Problem ist genau diese Prozedur:

    Das Einlesen des temporären Files in Arrays (ich hab gesagt bekommen ich solls mit Arrays versuchen), dann das Auswerten (ob online oder offline) und das Ausgeben (wenn online dann einer Variable einen bestimmten Wert zuweisen usw...)

    Wie ich das mit der GUI mache weiß ich jetzt schon. Wichtig ist nur, dass in dem temporären File verschieden viele Zeilen vorkommen können, so muss also eine Schleife beim Einlesen und Ausgeben durchlaufen (auch wieder was was ich nicht so ganz verstehe 😕 ).

    Ich hoffe Ihr konntet mein Problem verstehen und mir bei der Umsetzung etwas helfen.

    gruß und schonmal Danke!



  • Ich würde das mit dem Einlesen aus der Datei mit folgender Struktur realisieren:

    struct user_data
    {
        bool state;
        std::string domain;
        std::string ip;
        std::string id;
        std::strin version;
    };
    

    Nun kannst du z.B. über folgende Funktion das ganze einlesen:

    std::vector<user_data> readfile(const std::string& filename)
    {
        std::ifstream in(filename.c_str());
            std::vector<user_data> r;
        if(in)
        {
            user_data tmp;
            while(in.good())
            {
                in >> tmp.state;
                in >> tmp.domain;
                in >> tmp.ip;
                in >> tmp.id;
                in >> tmp.version;
    
                r.push_back(tmp);
            }
            if(!in.eof())
                // Fehlerbehandlung... (Exceptions, assert, was auch immer)
        }
        else
           // ebenfalls Fehlerbehandlung...
        return r;
    }
    

    Caipi



  • Danke Caipi,

    aber ich bin wirklich totaler C++ Einsteiger ( 😞 )

    Wenn ich das jetzt kompilieren will bringt mir der Compiler folgende Fehler:

    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(16) : error C2039: 'vector': Ist kein Element von 'std'
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(16) : error C2065: 'vector': nichtdeklarierter Bezeichner
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(16) : error C2275: '(void)main::user_data': Ungültige Verwendung dieses Typs als Ausdruck
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(9): Siehe Deklaration von '(void)main::user_data'
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(16) : error C2143: Syntaxfehler: Es fehlt ')' vor 'const'
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(16) : error C2059: Syntaxfehler: ')'
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(17) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(18) : error C2065: 'filename': nichtdeklarierter Bezeichner
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(18) : error C2228: Der linke Teil von '.c_str' muss eine Klasse/Struktur/Union sein
    Typ ist ''unknown-type''
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(16) : error C3861: 'readfile': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(18) : error C2079: 'in' verwendet undefiniertes class 'std::basic_ifstream<_Elem,_Traits>'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(18): Siehe Verweis auf Instanziierung der kompilierten Klassenvorlage 'std::basic_ifstream<_Elem,_Traits>'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(18): Siehe Verweis auf Instanziierung der kompilierten Klassenvorlage 'std::basic_ifstream<_Elem,_Traits>'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\Dokumente und Einstellungen\usr\Eigene Dateien\Visual Studio Projects\test\test.cpp(18) : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.

    Achja, ich mach das (wie man sehen kann) erstmal in Visual C++ in Windows, um mal das Grundgerüst aufzubauen. Später muss ich dann das CDK unter Linux incl. GUI durchcompilen lassen. Da dauert mir das Testen aber immer zu lange da ich dann die komplette GUI wieder per FTP in den Receiver schieben und starten muss usw...
    So mach ich das lieber in einer DOS Konsole (wenns geht) 🙂

    Danke auf jedenfall für deine Hilfe 😉



  • So mach ich das lieber in einer DOS Konsole (wenns geht) 🙂

    Das würde ich dir sowieso erstmal empfehlen. Desweiteren wird dir ein Tutorial/Buch sicher nicht schlecht tun, da dir scheinbar die absoluten Grundlagen fehlen. IMHO solltest du deswegen vielleicht erstmal mit einem etwas kleineren Projekt anfangen... (Da es dir schneller Erfolgserlebnisse beschert)

    Aber das ist deine Entscheidung.

    Zu den Fehlern: Hast wahrscheinlich den entsprechenden Header (<vector>, etc.) vergessen... Ansonsten fehlt Code um genaueres zu sagen.

    Caipi



  • Danke, dann werd ich mir mal nochn paar Tuts und Bücher durchlesen.

    😉


Anmelden zum Antworten