Vraag Hoe stel ik Booleaanse waarden in een INI-configuratiebestand in?


Ik heb verschillende manieren gezien om de Booleaanse waarden in INI-bestanden in te stellen:

  • variable = true
  • variable = 1
  • variable = on
  • variable = yes

Welke is de meest canonieke, veel voorkomende en / of geprefereerde manier?


16
2017-09-17 22:03


oorsprong


antwoorden:


Er is geen specificatie voor INI-bestanden, maar voor wat het waard is, zal ik een lijst maken van het gedrag van een paar implementaties uit talen die ik ken.

Python's ingebouwd configparser module biedt een getboolean dat gedraagt ​​zich als volgt:

de geaccepteerde waarden ... zijn '1', 'yes', 'true', en 'on', waardoor deze methode terugkeert True, en '0', 'no', 'false', en 'off', waardoor het terugkeert False.

In PHP's parse_init_file, aan de andere kant:

Stringwaarden "True", "op" en "Ja" worden geconverteerd naar TRUE. "False", "uit", "Nee" en "geen" worden beschouwd VALSE.

Ondertussen heeft .NET geen ingebouwde ondersteuning voor INI-parsing, maar de meest populaire INI-parsing-bibliotheek, ini-parser, biedt geen enkele ondersteuning voor het automatisch ontleden van waarden en retourneert ze allemaal als tekenreeksen. Haar Ermee beginnen voorbeelden tonen parsing booleans met .NET's Boolean.Parse, die de snaren accepteert "true" en "false" (met om het even welk hoofdlettergebruik) en werp een uitzondering als iets anders wordt gegeven.

Samenvattend: er bestaat absoluut geen consistentie over deze vraag tussen verschillende implementaties van INI-parsers.

Ik zou aanbevelen:

  • Als je je INI alleen gaat analyseren met een enkele parser, controleer dan hoe die parser zich gedraagt ​​en maak je INI geschikt voor zijn specifieke implementatie.
  • Als u een breed scala aan parsers wilt ondersteunen (bijvoorbeeld voor taalinteroperabiliteit), moet u INI volledig als een indeling opgeven of anders helemaal vermijden dat u de magische booleaanse waarden gebruikt die sommige parsers begrijpen en in plaats daarvan blijven plakken 1 en 0.

2
2018-01-13 12:17



Het hangt af van de parser van het ini-bestand. De waarden zijn altijd strings.

waar onwaar : In C # kan ik true en false strings direct naar bool converteren. Gelijk aan leesbaarheid en eenvoudige conversie. minder code.

0/1 : Ik moet string 0 en 1 converteren naar int alvorens te converteren naar bool. Kleinere ini-bestandsgrootte. Minder leesbaar. meer code.

ja / nee en aan / uit Ik zou een verklaring if / switch moeten gebruiken. leesbaar. meer code.

Mijn voorkeursmanier is waar / onwaar. Object serialize naar true / false, je kunt true / false gebruiken met het sql-bittype, ook al slaat het op als 0/1. Dus de enige keerzijde is de grootte die in de meeste contexten klein kan zijn.


4
2017-09-17 23:26