Quel est le format de fichier de configuration lisible par l'homme le plus simple? [fermé]


13

Le fichier de configuration actuel est le suivant:

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'

Ceci est lu avec python dans un dictionnaire imbriqué:

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

Existe-t-il une meilleure façon de le faire? L'idée est d'obtenir un comportement de type XML et d'éviter le XML le plus longtemps possible. L'utilisateur final est supposé presque totalement analphabète et utilise essentiellement le bloc-notes et le copier-coller. Ainsi, le type standard "en-tête + variables" de python est considéré comme trop difficile.

L'utilisateur factice édite le fichier de configuration, les programmeurs compétents gèrent les dictionnaires. Le dictionnaire imbriqué est choisi pour un fractionnement facile (l'enregistreur n'a pas besoin ou même ne peut pas avoir / modifier les paramètres de la fenêtre principale).


11
Le plus simple serait de créer pour votre client une petite application qui ne fait que modifier ces fichiers de configuration.
Patrick Hughes

11
Le fichier de configuration le plus simple pour les humains est: Do what I want.c'est le plus difficile pour les ordinateurs, cependant: P
Sjoerd

@PatrickHughes Je suppose qu'il en existe déjà un. Connaissez-vous un tel programme? Je ne voudrais pas prendre le temps de simplement "imprimer" des choses simples. Le problème est que l'ajout de petites coupures de programme nécessite plus. Je veux dire que chaque ordinateur a vim, textedit ou bloc-notes.
Juha

@sjoerd C'est ce que je voulais savoir. Existe-t-il des algorithmes plus axés sur le langage humain que des programmes dans ce sens.
Juha

2
Les utilisateurs peuvent tout casser. S'ils vont le modifier manuellement, préparez-vous à prendre en chargemainwindow.title =='test"
MSalters

Réponses:


15

Vous pouvez utiliser quelque chose comme YAML . Voici un lien vers un exemple:

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.

Vous pouvez trouver des liaisons Python pour cela sur PyYAML . Il est un peu plus convivial que JSON (ce à quoi ressemble votre deuxième exemple).


10
YAML est dandy, mais certainement pas le plus simple.
9000

1
Je pensais plus simple dans le contexte de sa question: "obtenir un comportement de type XML et éviter le XML le plus longtemps possible". Je ne suis pas sûr de quelque chose de plus simple, tout en répondant à cette exigence.
jmq

hmm, mon premier bloc de code YAML l'est aussi si je change le "." et "=" à ":" et perdre les aphostropes? Il y a un peu de données redondantes mais ce serait à l'utilisateur de choisir la notation qu'il préfère.
Juha

3
Je suis à peu près certain que les utilisateurs non techniques vont se tromper d'indentation - sans parler des choses les plus obscures comme l' >après comments:, et devant &et *devantid001
Izkata

6

La meilleure chose que vous puissiez faire est de fournir une maquette de votre solution, et peut-être une maquette de quelques autres solutions, et de demander à deux ou trois utilisateurs représentatifs de votre système. Ils seront bien meilleurs pour vous dire ce qu'ils aiment que les personnes auto-sélectionnées qui répondent aux questions sur ce site.

Cela étant dit, pour les utilisateurs "essentiellement analphabètes", je pense que le format que vous montrez dans votre question est probablement le meilleur format de texte brut. S'ils sont vraiment analphabètes, vous voudrez peut-être envisager une interface graphique simple afin qu'ils n'aient pas à modifier manuellement les fichiers de configuration.


3

Perdez tout ce que vous pouvez perdre. name.name.name=value, chacun sur une ligne distincte, est à peu près aussi simple que possible. Vous n'avez pas besoin des guillemets pour l'analyse, vous savez quand trueest un booléen et quand trueest une chaîne, ne faites pas que "l'homme stupide" vous le dise. Pour les chaînes, si le champ ne doit pas avoir de blancs de début / fin, supprimez-les vous-même.


3

Imaginez un Chinois qui ne connaît pas l'anglais et qui essaie de lire votre fichier de configuration. Vous pouvez également imaginer que le fichier de configuration est en arabe (et que vous ne connaissez pas l'arabe). Maintenant demandez-vous, est-ce vraiment lisible par l'homme?

Même si le lecteur connaît l'anglais, il ne sait toujours pas si "logger.datarate = 100" signifie 100 caractères par seconde, ou 100 Gio par heure, ou 100 poulets par tonne métrique.

Le format de fichier le plus lisible par l'homme est un fichier binaire avec une boîte de dialogue / assistant / configurateur basé sur une interface graphique décente (avec internationalisation, système d'aide, etc.).


2

Je suis avec Patrick Hughes. Créez une application simple pour éditer les configurations. Le fichier de configuration lui-même pourrait être un peu plus complexe et pourrait contenir des attributs à utiliser par l'éditeur (nom d'affichage, texte d'aide, type de valeur, valeur min / max, etc.).


1
le problème ici est que l'application doit prendre en charge osx, win et ubuntu et avoir accès au système de fichiers. Donc, ma seule alternative est l'exécutable python statique (et wx pour un look natif). Ou existe-t-il une autre langue? Pouvez-vous créer des exécutables Java statiques?
Juha

Une application QT serait une solution simple et conforme dans votre cas
Riga

2

Je dis que ce que vous avez (fichier de propriétés) est déjà le meilleur format de configuration lisible par l'homme. :)

Voici mes arguments:

  • Le fichier de propriétés est juste une paire clé / valeur. Facilement lisible par l'homme.
  • Syntaxe laconique, pas comme xml.
  • Facile à imbriquer, avec '.', Comme dans votre exemple.
  • La structure plate permet une différenciation facile dans un environnement contrôlé par la source.

Ce dernier point est en fait assez important. Étant donné que les projets sont tous aujourd'hui divisés en branches, le fichier de configuration peut causer des tonnes de douleur lorsque vous fusionnez des branches. Le format de fichier plat comme le fichier de propriétés est plus facile à fusionner que le fichier de structure arborescente.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.