Ergebnis 1 bis 5 von 5

Baum-Darstellung

  1. #1
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard CfgParser v2.0

    Mein zweiter Config-Parser. (der erste sollte hier irgendwo noch rumschwirren, ist aber schon relativ alt...)

    Ich weiß es gibt Bibliotheken für soetwas, aber ich mache mir mein Zeug lieber selbst

    Die Syntax ist wie folgt:

    Kommentare:
    ... können ähnlich wie in PHP mit

    1. /* C Stil */
    2. // C++ Stil
    3. # Perl Stil

    eingeleitet werden.
    Die Kommentare 2. und 3. werden mit einem Zeilenumbruch beendet.
    1. wird durch */ beendet und kann theoretisch über mehrere Zeilen gehen.

    Einträge:
    ... können wie folgt getätigt werden:
    1 Bezeichner 1 = 123 Wert 123
    Die blauen Zahlen bezeichnen mögliche Orte für Kommentare.
    Dort können Kommentare stehen, müssen aber nicht.
    An den Stellen, an denen nur eine eins steht ist nur ein Block-Kommentar möglich. Wo 123 steht, sind alle Kommentare möglich.
    Die Bereiche nach dem "ist-gleich-Zeichen" (=) sind optional.

    Das Bezeichner-Feld:
    Hier stehen folgende Zeichen zur Verfügung:
    Code:
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
    Das heißt: a-z + A-Z + 0-9 + _ (Unterstrich)
    Dieses Feld kann maximal 30 Zeichen lang sein.

    Das Werte-Feld:
    Hier werden 3 Typen unterschieden:

    1. String / Zeichenkette
    2. vorzeichenbehaftete Zahl (signed int)
    3. Leer / Nichts

    Ein String kann folgende Zeichen enthalten:
    Code:
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^°!\"§$%&/()=?`´²³{[]}\\@€~|µüÜöÖäÄ+*#'-_.:,;<>\t\v\a\b\f
    (C-Syntax: \t steht z.B. für einen Tabulator)
    Er kann maximal 512 Bytes (1/2 KB) groß sein.

    Will man Leerzeichen benutzen muss der String in einfachen bzw. doppelten Anführungszeichen (' bzw. ") stehen.

    Eine Zahl kann entweder in oktaler, dezimaler, oder hexadezimaler Form angegeben werden.
    Normalerweise wird die dezimale Form angenommen.
    Um eine Oktalzahl zu schreiben wird der Zahl eine 0 vorausgestellt.
    Um eine Hexadezimalzahl zu schreiben wird der Zahl ein 0x vorausgestellt.
    Die Zahlen sind durch die Größe eines vorzeichenbehafteten Integers (signed int) begrenzt.
    Hier einige Beispiele:
    Code:
    mydec = 1010
    myhex = 0xBEEF
    myoct = 044535
    Ein leerer Eintrag wird erzeugt, indem man nach dem "ist-gleich-Zeichen" einen Zeilenumbruch einfügt, oder einen der folgenden Werte hinschreibt:
    '', "", None, Empty, Null
    Groß- bzw. Kleinschreibung wird hierbei nicht beachtet.

    Benutzung:
    Um den Parser benutzen zu können muss man cfgparser.c zu seinem Projekt hinzufügen und cfgparser.h inkludieren.
    Anschließend ruft man die Funktion cfgp_parse auf.
    Ihr übergibt man den Dateinamen als ersten und eine "Callback-Funktion" als zweiten Parameter.

    Die "Callback-Funktion" besitzt folgenden Funktionsprototypen:
    Code:
    void cfgp_callback(char *name, void *value, int type)
    Name ist hierbei der Bezeichner (siehe oben) und value ein Zeiger auf den Wert.
    Von welchem Typ dieser Zeiger ist wird durch den Parameter type beschrieben.
    Mögliche Werte für type sind:
    Code:
    #define CFGP_TYPE_INTEGER 0
    #define CFGP_TYPE_STRING 1
    #define CFGP_TYPE_EMPTY 2
    (siehe cfgparser.h)

    Im Fall von CFGP_TYPE_INTEGER ist value ein Zeiger auf einen signed int.
    Für CFGP_TYPE_STRING ist value ein Zeiger auf einen char (char * - nicht char **).
    Bei CFGP_TYPE_EMPTY ist value uninteressant und wird auf 0 gesetzt.

    Der Rückgabewert von cfg_parse ist ein Integer, welcher im Erfolgsfall CFGP_SUCCESS (0) entspricht.
    Ist ein Fehler vorhanden wird (FEHLERCODE | ZEILE) zurückgegeben (| = Bitweises einschließendes ODER).

    Der Fehlercode kann mit dem Makro CFGP_ERROR_GET_CODE(x) extrahiert werden. Als Parameter wird der Rückgabewert angenommen.

    Das Makro CFGP_ERROR_GET_LINE(x) nimmt ebenfalls den Rückgabewert von cfgp_parse als Parameter, gibt hingegen die Zeile zurück, in der der Fehler aufgetreten ist.

    Ein Beispiel hierfür kann unten zusammen mit den anderen Sourcecodes gedownloadet werden.

    PS: dieses Verfahren kann ab der Zeile 268435455 (0x0FFFFFFF) zu Fehlern führen, da sich dann die Zeilenzahl mit dem Fehlercode überlagert und diesen somit verfälscht.
    Ich glaube jedoch nicht, dass jemand so große Dateien parsen wird.

    Download Inhalt:
    Der Download enthält folgende Dateien:

    • cfgparser.c - die Hauptsourcedatei
    • cfgparser.h - die Schnittstelle
    • CfgParser.dev - die Projektdatei für Dev-C++
    • CfgParserZustände.png - ein (unvollständiges) Zustandsdiagramm (Achtung: nicht aktuell)
    • main.cpp - ein Beispielprogramm, welches die Werte aus example.conf ausgibt
    • example.conf - eine Beispielkonfiguationsdatei - wird von main.cpp benötigt


    Download:
    http://bbsrc.incecx.net/cfgparser.rar <--- freundlicherweise zur Verfügung gestellt von cby
    MD5 Checksum: a9a287d027bcda29f05d6a4c6dcf6d8f *cfgparser.rar
    Passwort: free-hack.com

    Ich hoffe jemand kann das hier gebrauchen

    PS: Feedback ist erwünscht - ich hab das Programm heute erst fertiggestellt, also wer lust hat kann gerne nach Bugs suchen.


    mfG. BlackBerry
    Geändert von blackberry (14.05.2012 um 15:42 Uhr) Grund: Neuer Link

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •