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: 42hund 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 mit0b 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 reichenEinträge in einer Konfigurations Datei werden mit einem Namen (≡Subkey) und einem Gleichheitszeichen begonnen
Einträge werden unter in [] Klammern angebenen Namen(≡Keys) gruppiertWenn 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=testprogrammDas 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 beliebigSolche Dateien können randomAcess mäßig gelesen und geschreiben werden
Listen können mit einem Befehl gelesen werdenIch hoffe es hilft
-
DrGreenthumb schrieb:
ich würde es so machen:
dezimal: 42 oder 42d
dual: 1100101b
oktal: 42o
hex: 42hDas 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.