Werte in einer Konfigurationsdatei definieren



  • Hallo,

    ich hab mich jetzt endlich mal dazu durchgerungen, für mein aktuelles Programm ein vernünftiges Konfigurationslayout zu definieren.
    Letztendlich stehen dabei relativ normale Textdateien im Mittelpunkt, in denen unter einem Bezeichner ein Wert gespeichert ist. Möglich sind dabei Einzelwerte, Strukturen und Arrays. Das aber nur am Rande. Momentan bin ich dabei, die möglichen Werte zu definieren. Grundsätzlich hatte ich mir eine Definition so vorgestellt:

    <bezeichner> <typ> <wert>
    

    Für <typ> soll Folgendes möglich sein: boolean, integer, real, character, string, binary.
    Da jemanden, der so eine Datei bearbeitet, die Typangabe aber herzlich wenig interessiert, bin ich davon abgekommen, diese explizit anzugeben. Die Syntax wird deshalb verkürzt

    <bezeichner> <wert>
    

    und der Typ anhand des Wertes ermittelt. Das schränkt zwar die Flexibilität ein, ich gehe aber nicht davon aus, dass weitere Typen nötig sein werden.

    Soviel zur Vorgeschichte. Nun stellt sich für mich das Problem, wie ich Ganzzahlen und Fliesskommazahlen darstelle. Ich möchte auf jedenfall eine fei wählbare Basis, so dass zB auch binäre oder hexadezimale Werte möglich sind. Meine Überlegungen gehen deshalb in folgende Richtung:

    [<basis><trennzeichen>]<wert>
    

    Die Angaben in [] sind optional. Sollte dies also nicht angegeben werden, so ist <basis> automatisch 10. Dh natürlich auch, dass <basis> selbst ebenfalls dezimal angegeben wird. Als Trennzeichen habe ich momentan ein 'x' gewählt, da ich mit anderen (Sonder-)Zeichen nicht glücklich geworden bin. Aber vielleicht habt ihr dazu noch eine gute Idde.
    Und jetzt noch ein paar Beispiele, um sich mal ein Bld davon zu machen:

    2x11000110
    8x306
    10x198
    198
    16xc6
    

    Gleiches soll für Fliesskommazahlen möglich sein, dann kommt halt nur noch ein fractional Teil hinzu. Für das Parsen von Ganzzahlen hab ich übrigens schon eine Implementation, die auch funktioniert.
    Was haltet ihr davon? Ist das zu komplex? Oder gibt es einfachere bzw. bessere Möglichkeiten?



  • ich würde es so machen:

    dezimal: 42 oder 42d
    dual: 1100101b
    oktal: 42o
    hex: 42h

    und mehr basen braucht man eigentlich eh nie, wenn doch dann deine ..x.. variante.



  • Hm, das soll dann eine Konfigurationsdatei sein ?
    Also wer kein Informatiker ist, wird damit wohl probleme haben...
    Wenn der User selber dort auch einstellungen vor nehmen soll,
    dann muss er auch wissen was er einstellt, falls er das nicht soll,
    sind die bezeichner evtl. sogar überflüssig.

    Devil



  • eine gängige Form ist
    Was mit

    0b  beginnt ist eine Binaerzahl  0b111[e]equiv[/e]07[e]equiv[/e]7[e]equiv[/e]0x7
    0   beginnt ist eine octalzahl   010[e]equiv[/e]8[e]equiv[/e]0x8[e]equiv[/e]0b1000
    0x  beginnt ist eine hexzahl     0x10[e]equiv[/e]0b10000[e]equiv[/e]0100[e]equiv[/e]16 
    was mit einer beliebigen Ziffer beginnt ist eine Integer   9[e]equiv[/e]0b1001[e]equiv[/e]012[e]equiv[/e]0x9
    was einen Punkt oder ein e enthält ist eine floatzahl
    

    alles andere ist ein String, enhält der String whitespace Character muß er in '"' eingeschlossen sein

    Der Delimiter zwischen einzelnen Elementen ist das Komma innerhalb von in '"' eingeschlossenen Strings wird das , nicht ausgewertet
    Das müsste als Basisdefinition reichen

    Einträge in einer Konfigurations Datei werden mit einem Namen (≡Subkey) und einem Gleichheitszeichen begonnen
    Einträge werden unter in [] Klammern angebenen Namen(≡Keys) gruppiert

    Wenn ich eine Liste von Einträgen habe so beginnt diese
    mit Name.nr , die Namen der einzelnen Elemente heißen dann name.i wobei i linerar aufsteigend und komplett ist

    [Test]
    name.nr=3
    name.1=Test
    name.2=0x333,0b1101
    name.3="test,test1",test2,0xbb

    [test1]
    Progname=testprogramm

    Das ganze sieht leider den Windoof Ini dateien sehr ähnlich, aber auch ein blindes Huhn findet mal einen Korn

    Auf eine Element wird Key,subkey zugegriffen. Die Reihenfolge der Subkey innerhalb eines Keys ist beliebig
    Die Reihenfolge der Keys in der Datei ist beliebig

    Solche Dateien können randomAcess mäßig gelesen und geschreiben werden
    Listen können mit einem Befehl gelesen werden

    Ich hoffe es hilft



  • DrGreenthumb schrieb:

    ich würde es so machen:

    dezimal: 42 oder 42d
    dual: 1100101b
    oktal: 42o
    hex: 42h

    Das hatte ich am Anfang auch mal in Betracht gezogen. Allerdings gefällt mir das nicht sonderlich, weil man damit von vornherein die Werte auf die 4 Zahlensysteme. Ob man jemals mehr braucht, ist natürlich eine andere Frage. Zumal wird damit auch das Parsen etwas komplizierter.

    devil81 schrieb:

    Hm, das soll dann eine Konfigurationsdatei sein ?

    Yep.

    devil81 schrieb:

    Also wer kein Informatiker ist, wird damit wohl probleme haben...

    Grundsätzlich sollen die wichtigsten Einstellungen ja auch über die Anwendung selbst verändert werden, und dann eben in einer solchen Textdatei abgespeichert werden. Wer das will, kann aber auch mit einem Texteditor rangehen. Wer schon mal ini Dateien editiert hat, wird damit keine Probleme haben.

    @PAD
    Letztendlich soll die Datei ähnlich der von dir beschriebenen Struktur entsprechen. Allerdings wird es keine "Keys", sondern nur "SubKeys" geben. Alles in allem also ein sehr einfacher Aufbau. Hab am Anfang zwar mal darüber nachgedacht, XML dafür zu verwenden. Aber das war mir für manuelles Editieren zu viel syntaktischer Schnickschnack. Naja, über die Präfixe der Zahlen muss ich nochmal näher nachdenken. Ist mir jedenfalls etwas sympathischer als Suffixe.

    Danke erstmal für die Anregungen.


Anmelden zum Antworten