Czy standardowe pliki .ini systemu Windows zezwalają na komentarze?

92

Czy komentarze są dozwolone w plikach ini systemu Windows? (... zakładając, że używasz funkcji API GetPrivateProfileString do ich odczytywania ...)

[Section]
Name=Value   ; comment

; full line comment

I czy jest gdzieś odpowiednia specyfikacja formatu pliku .INI?

Dzięki za odpowiedzi - ale może nie byłam wystarczająco jasna. Interesuje mnie tylko format odczytywany przez wywołania Windows API . Wiem, że inne implementacje pozwalają na komentarze, ale jest to konkretnie specyfikacja i implementacja MS Windows, o których muszę wiedzieć.

Roddy
źródło
1
API zwraca wartość i komentarz, wystarczy poszukać wartości SemiColon i przeczytać lub usunąć to podczas spotkania, używając wyrażenia regularnego lub po prostu poszukać;
RoguePlanetoid
7
@RoguePlanetoid Wyrażenie regularne, aby znaleźć ;znak? Poważnie!?
Niespodziewane
1
@IInspectable Może użyć wyrażenia regularnego tylko do odczytu komentarza, więc wyodrębnij element po średniku, lub jak wspomniałem w moim komentarzu lub poszukaj; dając alternatywę do wyodrębnienia samego komentarza lub szukania obecności takiego, o którym myślałem, że mój komentarz ma wartość dodaną, po prostu sprawdzając, czy był średnik, był niekompletny komentarz
RoguePlanetoid,

Odpowiedzi:

96

Obsługa Windows INI API dla:

  • Komentarze do linii : tak, używając średnika;
  • Komentarze końcowe: Nie

Autorytatywnym źródłem jest funkcja Windows API, która odczytuje wartości z plików INI

GetPrivateProfileString

Pobiera ciąg z określonej sekcji w pliku inicjującym.

Przyczyną działania „pełnych komentarzy w wierszu” jest to, że żądana wartość nie istnieje. Na przykład podczas analizowania następującej inizawartości pliku:

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

Czytanie wartości:

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

Aktualizacja : Kiedyś myślałem, że znak numeru (#) to pseudo-wierszowy komentarz. Powodem używania wiodącego # działa do ukrycia stackoverflowjest to, że nazwa stackoverflowjuż nie istnieje. Okazuje się, że średnik ( ;) jest komentarzem do linii.

Ale nie ma obsługi końcowych komentarzy.

Ian Boyd
źródło
3
Bardzo pomocne przykłady, ale wydaje mi się, że sformułowanie „Powodem, dla którego„ komentarze pełnoliniowe ”działają, jest brak żądanej wartości” . Chciałbym wyjaśnić, że implementacja Windows INI wymaga średnika przed parą klucz / wartość (jeśli występuje), w przeciwnym razie jest uważana za część wartości.
GravityWell
@Roddy Masz rację. Byłem tak skupiony na używaniu, #że nie zwróciłem uwagi na ;. Poprawiono odpowiedź, aby wskazać, że średnik naprawdę jest komentarzem do linii.
Ian Boyd
29

Widziałem komentarze w plikach INI, więc tak. Zapoznaj się z tym artykułem w Wikipedii . Nie mogłem znaleźć oficjalnej specyfikacji, ale to jest poprawna składnia komentarzy, ponieważ wiele plików INI gry miało to, o ile pamiętam.

Edytować

API zwraca wartość i komentarz (zapomniałem o tym wspomnieć w mojej odpowiedzi), po prostu skonstruuj i przykładowy plik INI i wywołaj API na tym (z komentarzami) i możesz zobaczyć, jak to jest zwracane.

RoguePlanetoid
źródło
1
Korzystając ze źródeł, bardziej sensowne jest użycie najbardziej autorytatywnego źródła, a następnie wszelkich źródeł pomocniczych.
Mike Collins
1
Jasne, że to dobry pomysł - nigdy nie jest za późno, by to podkreślić - nawet po siedmiu latach
RoguePlanetoid
9

UŻYJ PÓŁKOLONA NA POCZĄTKU LINII --- >>; << ---

Dawny.

; last modified 1 April 2001 by John Doe
[owner]
name=John Doe
organization=Acme Widgets Inc.
Antoine Meltzheim
źródło
1

Tak. Zapoznaj się z Wikipedią i Cloanto Implementacja formatu pliku INI (patrz dół strony).

Koekiebox
źródło
9
Um ... dlaczego myślisz, że to jest autorytatywna specyfikacja plików INI?
reuben
Chociaż implementacja Cloanto może nie być oficjalną specyfikacją, podobało mi się ich wyjaśnienie.
Koekiebox