Erlauben Standard-Windows-INI-Dateien Kommentare?


88

Sind Kommentare in Windows INI-Dateien zulässig? (... vorausgesetzt, Sie verwenden die API-Funktionen GetPrivateProfileString , um sie zu lesen ...)

[Section]
Name=Value   ; comment

; full line comment

Und gibt es irgendwo eine richtige Spezifikation des INI-Dateiformats?

Vielen Dank für die Antworten - aber vielleicht war ich nicht klar genug. Es ist nur das Format , das von Windows-API-Aufrufen gelesen wird , an dem ich interessiert bin. Ich weiß, dass andere Implementierungen Kommentare zulassen, aber es ist speziell die MS Windows-Spezifikation und -Implementierung, über die ich Bescheid wissen muss.


1
Die API gibt den Wert und den Kommentar zurück. Sie müssen nur nach dem SemiColon suchen und diesen lesen oder entfernen, wenn Sie auf einen regulären Ausdruck stoßen, oder einfach nach dem suchen.
RoguePlanetoid

7
@RoguePlanetoid Ein regulärer Ausdruck, um ein ;Zeichen zu finden ? Ernsthaft!?
Unsichtbarer

1
@IInspectable Könnte den regulären Ausdruck verwenden, um den Kommentar nur zu lesen. Extrahieren Sie daher das Element nach dem Semikolon oder wie in meinem Kommentar erwähnt oder suchen Sie nach dem; Ich gab die Alternative, den Kommentar selbst zu extrahieren oder nach dem Vorhandensein eines Kommentars zu suchen. Ich dachte, mein Kommentar hätte einen Mehrwert, nur um zu sehen, ob ein
Semikolon vorhanden

Antworten:


92

Windows INI API-Unterstützung für:

  • Zeilenkommentare : Ja, mit Semikolon;
  • Nachfolgende Kommentare: Nein

Die maßgebliche Quelle ist die Windows-API-Funktion, die Werte aus INI-Dateien liest

GetPrivateProfileString

Ruft eine Zeichenfolge aus dem angegebenen Abschnitt in einer Initialisierungsdatei ab.

Der Grund, warum "vollständige Zeilenkommentare" funktionieren, liegt darin, dass der angeforderte Wert nicht vorhanden ist. Zum Beispiel beim Parsen der folgenden iniDateiinhalte:

[Application]
UseLiveData=1
;coke=zero
pepsi=diet   ;gag
#stackoverflow=splotchy

Werte lesen:

  • UseLiveData:: 1
  • coke: nicht vorhanden
  • ;coke: nicht vorhanden
  • pepsi:: diet ;gag
  • stackoverflow: nicht vorhanden
  • #stackoverflow:: splotchy

Update : Früher dachte ich, dass das Nummernzeichen (#) ein Pseudo-Zeilen-Kommentarzeichen ist. Der Grund für das Ausblenden von führenden # funktioniert, stackoverflowweil der Name stackoverflownicht mehr existiert. Und es stellt sich heraus , dass Semikolon ( ;) ist ein Line-Kommentar.

Es gibt jedoch keine Unterstützung für nachfolgende Kommentare.


3
Sehr hilfreiche Beispiele, aber ich finde den Wortlaut "Der Grund, warum" Kommentare in voller Zeile "funktionieren, ist, dass der angeforderte Wert nicht existiert" schwer zu analysieren. Ich möchte klarstellen, dass für die Windows INI-Implementierung das Semikolon vor dem Schlüssel / Wert-Paar (falls vorhanden) erforderlich ist, andernfalls wird es als Teil des Werts betrachtet.
GravityWell

@ Roddy Du hast recht. Ich war so konzentriert auf die Verwendung, #dass ich nicht auf die ;. Die Antwort wurde korrigiert, um darauf hinzuweisen, dass Semikolon wirklich ein Zeilenkommentar ist.
Ian Boyd

29

Ich habe Kommentare in INI-Dateien gesehen, also ja. Bitte beziehen Sie sich auf diesen Wikipedia-Artikel . Ich konnte keine offizielle Spezifikation finden, aber das ist die richtige Syntax für Kommentare, so viele Spiel-INI-Dateien hatten diese, wie ich mich erinnere.

Bearbeiten

Die API gibt den Wert und den Kommentar zurück (ich habe vergessen, dies in meiner Antwort zu erwähnen). Erstellen Sie einfach eine INI-Beispieldatei und rufen Sie die API auf (mit Kommentaren), und Sie können sehen, wie dies zurückgegeben wird.


1
Bei der Verwendung von Quellen ist es sinnvoller, die maßgeblichste Quelle und dann alle unterstützenden Quellen zu verwenden.
Mike Collins

1
Sicher, das ist eine gute Idee - nie zu spät, um darauf hinzuweisen - auch nach sieben Jahren
RoguePlanetoid

8

BENUTZEN SIE EINEN HALBKOLON ZU BEGINN DER LINIE --- >>; << ---

Ex.

; last modified 1 April 2001 by John Doe
[owner]
name=John Doe
organization=Acme Widgets Inc.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.