Was ist das einfachste von Menschen lesbare Konfigurationsdateiformat? [geschlossen]

13

Die aktuelle Konfigurationsdatei lautet wie folgt:

mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200

mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30

logger.datarate = 100
logger.enable = True
logger.filename = './test.log'

Dies wird mit Python in ein verschachteltes Wörterbuch eingelesen:

{
  'mainwindow':{
    'button':{
      'label': {'value':'apply'},
       ...
  },
  'logger':{
     datarate: {'value': 100},
     enable: {'value': True},
     filename: {'value': './test.log'}
  }, 
  ...    
}

Gibt es einen besseren Weg, dies zu tun? Die Idee ist, XML-Verhalten zu erhalten und XML so lange wie möglich zu vermeiden. Der Endbenutzer wird fast ausschließlich als Computer-Analphabet angenommen und verwendet im Wesentlichen Notizblock und Copy-Paste. Daher wird der Python-Standardtyp "Header + Variablen" als zu schwierig angesehen.

Der Dummy-Benutzer bearbeitet die Konfigurationsdatei. Programmierer können die Wörterbücher bearbeiten. Das verschachtelte Wörterbuch wurde für eine einfache Aufteilung ausgewählt (der Logger benötigt keine Hauptfensterparameter oder kann diese nicht bearbeiten).

Juha
quelle
11
Am einfachsten wäre es, wenn Sie Ihrem Client eine kleine App erstellen, die nichts anderes tut, als diese Konfigurationsdateien zu bearbeiten.
Patrick Hughes
11
Die einfachste Konfigurationsdatei für Menschen ist: Do what I want.Sie ist jedoch die schwierigste für Computer: P
Sjoerd
@PatrickHughes Ich würde vermuten, dass es dort bereits einen gibt. Kennen Sie ein solches Programm. Ich möchte mir nicht die Zeit nehmen, einfache Dinge "schön zu drucken". Das Problem ist, dass das Hinzufügen kleiner Programmunterbrechungen mehr erfordert. Ich meine, jeder Computer hat vim, textedit oder notepad.
Juha
@sjoerd Das wollte ich wissen. Gibt es Algorithmen, die sich mehr mit der menschlichen Sprache befassen als Programme in diesem Sinne?
Juha
2
Benutzer können alles brechen. Wenn sie es manuell bearbeiten mainwindow.title =='test"
möchten

Antworten:

15

Sie könnten so etwas wie YAML verwenden . Hier ist ein Link zu einem Beispiel:

http://www.yaml.org/start.html

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

Python-Bindungen dafür finden Sie bei PyYAML . Es ist etwas benutzerfreundlicher als JSON (so sieht Ihr zweites Beispiel aus).

jmq
quelle
10
YAML ist Dandy, aber definitiv nicht die einfachste.
9000
1
Ich dachte am einfachsten im Zusammenhang mit seiner Frage: "Holen Sie sich XML-Verhalten und vermeiden Sie XML so lange wie möglich". Ich bin mir nicht sicher, ob es einfacher ist, wenn ich diese Anforderung erfülle.
JMQ
hmm, also ist mein erster Codeblock YAML wenn ich das "." ändere und "=" um ":" und die Aphostropes zu verlieren? Es gibt ein bisschen redundante Daten, aber dann liegt es am Benutzer, welche Schreibweise ihm am besten gefällt.
Juha
3
Ich bin mir ziemlich sicher, dass nicht-technische Benutzer die Einrückung falsch >comments:&*id001
verstehen werden
6

Das Beste, was Sie tun können, ist, ein Modell Ihrer Lösung und möglicherweise ein Modell einiger anderer Lösungen bereitzustellen und zwei oder drei repräsentative Benutzer Ihres Systems zu befragen. Sie können Ihnen viel besser sagen, was sie mögen, als die selbst ausgewählten Personen, die auf dieser Website Fragen beantworten.

Abgesehen davon halte ich das Format, das Sie in Ihrer Frage anzeigen, für das wahrscheinlich beste Nur-Text-Format. Wenn sie wirklich Computer-Analphabeten sind, sollten Sie eine einfache Benutzeroberfläche in Betracht ziehen, damit sie die Konfigurationsdateien nicht manuell bearbeiten müssen.

Bryan Oakley
quelle
3

Verliere alles, was du verlieren kannst. name.name.name=valueJedes in einer separaten Zeile ist so einfach wie möglich. Sie brauchen die Anführungszeichen nicht zum Parsen, Sie wissen, wann trueein Boolescher Wert und wann trueein String ist, lassen Sie sich das nicht vom "dummen Menschen" sagen. Wenn das Feld für Zeichenfolgen keine führenden / nachfolgenden Leerzeichen enthalten soll, entfernen Sie sie selbst.

Ross Patterson
quelle
3

Stellen Sie sich eine chinesische Person vor, die kein Englisch kann und versucht, Ihre Konfigurationsdatei zu lesen. Stellen Sie sich alternativ vor, die Konfigurationsdatei ist in Arabisch (und Sie kennen kein Arabisch). Nun fragen Sie sich, ist das wirklich menschlich lesbar?

Selbst wenn der Leser Englisch kann, hat er keine Ahnung, ob "logger.datarate = 100" 100 Zeichen pro Sekunde oder 100 GiB pro Stunde oder 100 Hühner pro Tonne bedeutet.

Das am besten lesbare Dateiformat ist eine Binärdatei mit einem anständigen GUI-basierten Dialogfeld / Assistenten / Konfigurator (mit Internationalisierung, Hilfesystem usw.).

Brendan
quelle
2

Ich bin bei Patrick Hughes. Erstellen Sie eine einfache App zum Bearbeiten von Konfigurationen. Die Konfigurationsdatei selbst könnte etwas komplexer sein und Attribute enthalten, die der Editor verwenden kann (Anzeigename, Hilfetext, Wertetyp, Min / Max-Wert usw.).

Misko
quelle
1
das problem dabei ist, dass die app osx, win und ubuntu unterstützen und zugriff auf das dateisystem haben muss. Meine einzige Alternative ist also die ausführbare statische Python-Datei (und wx für das native Aussehen). Oder gibt es noch andere Sprachen? Können Sie statische Java-Programme erstellen?
Juha
Eine QT-App wäre in Ihrem Fall eine einfache und konforme Lösung
Riga,
2

Ich sage, was Sie haben (Eigenschaftendatei), ist bereits das beste von Menschen lesbare Konfigurationsformat. :)

Hier sind meine Argumente:

  • Die Eigenschaftendatei ist nur ein Schlüssel / Wert-Paar. Für Menschen leicht lesbar.
  • Knappe Syntax, nicht wie XML.
  • Mit '.' Leicht verschachtelbar, wie in Ihrem Beispiel.
  • Die flache Struktur ermöglicht ein einfaches Unterscheiden in einer quellengesteuerten Umgebung.

Dieser letzte Punkt ist eigentlich ziemlich wichtig. Da Projekte heutzutage alle in Zweige unterteilt sind, kann die Konfigurationsdatei beim Zusammenführen von Zweigen erhebliche Schmerzen verursachen. Flache Dateiformate wie Eigenschaftendateien lassen sich einfacher zusammenführen als Baumstrukturdateien.

ming_codes
quelle