INI
Az INI fájlformátum különböző számítógépes platformon elterjedt formátuma a konfigurációs fájloknak. Az INI egyszerű szöveges állomány, mely szekciókra osztott kulcs-érték párokat tartalmaz.
Az MS-DOS és a 16 bites korai Windows rendszerektől egészen a Windows ME verzióig az INI fájlformátum volt a rendszer, a driverek, boot, stb. elsődleges konfigurációs háttere. Az alkalmazások körében is az INI volt a legnépszerűbb az egyedi beállítások tárolásánál.
A Microsoft a Windows NT-vel vezette be a registryt, amely már nem szövegesen tárolja a rendszer, a felhasználók és az alkalmazások konfigurációit. A későbbi Windows rendszerek szintén a registryt használják, de a .NET-re épülő alkalmazások körében gyakoriak az XML alapú megoldások is.
Az „INI fájl” elnevezés a leggyakrabban alkalmazott kiterjesztésből (.INI
) származik, ami az „initialization”, vagy „inicializáció” rövidítése. Elterjedt kiterjesztések még a .CFG
, .conf
és a .txt
.
A Linux (és más Unix) rendszerek, illetve a platform-független szoftverek szintén használják a konfigurációiknál. Szövegesen olvasható, géppel is könnyen értelmezhető, ami nagyban hozzájárult a széles körű elterjedéséhez.
Formátum
Tulajdonságok (property)
Az INI fájlok alapelemei a tulajdonságok vagy propertyk. minden tulajdonság egy kulcs és egy érték rendezett párjából áll, egyenlőségjellel (=
) elválasztva.
kulcs=érték
Szekciók (section)
A tulajdonságokat szabadon lehet ún. szekciókba csoportosítani. A szekciók neve tetszőleges lehet, szögletes zárójelek közé kell egy sorba írni ([
és ]
). Minden ez után leírt tulajdonság az adott szekcióhoz tartozik. A szekció végét implicit módon a következő szekció megadása jelzi, minthogy nincs explicit szekció vége jel, ugyanis az INI-ben nem lehet a szekciókat egymásba ágyazni.
[szekciónév] a=1 b=2
Nagybetű, kisbetű
A Windows implementációja nem tesz különbséget a nagy- és kisbetűk között.[1]
Kommentek
A sor elejére írt pontosvessző (;
) kommentet jelöl, az értelmező figyelmen kívül hagyja a sort.
; comment text
Egyéb változatok
Az INI formátum nincs pontosan definiálva, nincs szabványa. Számos program, vagy INI értelmező szabadon kezelheti az egyes nyelvi elemeket.
Üres sorok
Kezdetleges INI-feldolgozóknál előfordulhat, hogy nem engedélyezettek az üres sorok. Egy sor vagy szekciódefiníció, vagy tulajdonság, vagy komment kell, hogy legyen.
Kommentek
Létezik olyan megvalósítás, ahol a sor-kommentet a szriptnyelvekhez hasonlóan a kettőskereszt (#
) jelöli.
Egyes implementációkban a komment bárhol kezdőthet egy sorban, ahol a pontosvessző jelöli. Máshol (pl. a Windows GetPrivateProfileString rendszerhívása) az egész sornak kommentnek kell lennie.
Azonos kulcsnevek
A legtöbb megvalósítás nem engedi meg, hogy egy szekción belül egy kulcsnév többször előforduljon. A második előfordulás vagy az értelmezés megszakítását, vagy a tulajdonság figyelmen kívül hagyását, vagy az előző előfordulás felülírását eredményezheti. Néhány program megengedheti a névismélődést, ún. multi-valued properties formájában.
Escape karakterek
Az escape karaktereket legelterjedtebben a visszaper (\
) karakterrel használhatjuk.
Szekvencia | Jelentés |
---|---|
\\ | \ (egyszerű visszaper, escape-eli az escape karaktert) |
\0 | Null karakter |
\a | Bell/Rendszercsengő |
\b | Backspace/visszatörlés, ritkán Bell karakter |
\t | Tabulátor |
\r | Kocsi vissza |
\n | Újsor karakter |
\; | Pontosvessző |
\# | Kettőskereszt |
\= | Egyenlőségjel |
\: | Kettőspont |
\x???? | Unicode karakter hexadecimálisan megadva (????) |
Globális tulajdonságok
Opcionálisan globális tulajdonságok is értelmezhetőek, ha a szekciódefiníciók előtt lettek deklarálva.[2]
Hierarchia
Habár az INI formátum nem hierarchikus, bizonyos névkonvenciók alkalmazásával lehet a szekciók között látszólagos hierarchiát alkalmazni. Ha az A
szekció része a B
alszekció, melynek része a C
al-alszekció, akkor például a [A.B.C]
szekciómegjelöléssel ez a hiányzó funkció helyettesíthető (ezt alkalmazza pl. a Windows xstart.ini
állománya). Használatos még a [A\B\C]
és a [A]
szekció, B,C,P = V
kulcs-érték pár konvenció is.
Nincs rá szabvány, így nem egyértelmű, hogy egy adott modul, amelyik ezen megközelítések valamelyikét alkalmazza, az alkalmazásfejlesztőre bízza az álhierarchia ilyen jellegű megvalósítását, vagy saját maga, a névkonvenciók alapján eleve egy hierarchikus hozzáférést biztosít a tárolt tulajdonságokhoz.
Kulcs-érték elválasztó
Néhány implementáció kettőspontot (:
) használ kulcs-érték elválasztónak (az egyenlőségjel helyett).
Whitespace
A whitespace értelmezése különböző. A legtöbb modul figyelmen kívül hagyja az elválasztó karakter körüli szóközöket, némely még az értékeken belül is (ilyen esetben például a „host name” és a „hostname” jelentése megegyezik). De előfordulhat, hogy egy feldolgozó minden karaktert figyelembe vesz az egyenlőségjeltől a sorvégéig.
Példa
A következő fiktív példa két szekciót tartalmaz: az első a szoftver felhasználójának adatait, a második pedig a használt adatbázis-kapcsolatot. A kommentek az utolsó módosítást, illetve a szervereléréshez szóló javaslatot tartalmazzák.
; last modified 1 April 2001 by John Doe [owner] name=John Doe organization=Acme Widgets Inc. [database] ; use IP address in case network name resolution is not working server=192.0.2.62 port=143 file="payroll.dat"
INI fájlok feldolgozása
A Windows Profile APIján keresztül lehetőséget ad INI fájlok írására és olvasására. Például a GetPrivateProfileString függvény a megadott INI fájl megadott szekciójából egy sztringet (karakterláncot) ad vissza.
A következő C program azt mutatja be, hogy hogyan lehet sztringet, illetve egész számot kiolvasni a fenti INI példafájlból:
#include <windows.h> int main(int argc, _TCHAR *argv[]) { _TCHAR dbserver[1000]; int dbport; GetPrivateProfileString("database", "server", "127.0.0.1", dbserver, sizeof(dbserver), ".\\dbsettings.ini"); dbport = GetPrivateProfileInt("database", "port", 143, ".\\dbsettings.ini"); // N.B. WritePrivateProfileInt() does not exist return 0; }
A Python standard könyvtárának configparser modulja, a PHP parse_ini_file függvénye, a Ruby környezetben pedig a inifile gem végzi az INI fájlok feldolgozását.
A C++ nyelvhez többek közt a Qt library nyújt platformfüggetlen INI-feldolgozást a QSettings Archiválva 2014. február 25-i dátummal a Wayback Machine-ben osztályon keresztül.
QSettings settings("dbsettings.ini", QSettings::IniFormat); settings.beginGroup("database"); settings.setValue("server", "192.0.2.62"); settings.endGroup();
Alternatívák
Konfiguráció tárolására a Windows a registryt javasolja, de ezen kívül más leírónyelvek, mint pl. az XML, JSON, YML, vagy egyszerű adatbázisok, mint az SQLite is használhatóak.
Jegyzetek
- ↑ GetPrivateProfileString function. Microsoft Developer Network. Microsoft. (Hozzáférés: 2012. június 2.)
- ↑ Apache Documentation for org.apache.commons.configuration.HierarchicalINIConfiguration Archiválva 2012. november 12-i dátummal a Wayback Machine-ben, The Apache Software Foundation
Fordítás
- Ez a szócikk részben vagy egészben az INI file című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
További információk
- INI-értelmező C++ nyelven
- INI-értelmező Objective-C nyelven
- INI-értelmező Python nyelven
- INI-értelmező és -generáló Common Lispben
- INI-értelemző tutorial Java nyelven
- Az INI fájl Cloanto-implementációja
- Az INI fájl Nickel-implementációja
- Informatikai portál • összefoglaló, színes tartalomajánló lap