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 szerkesztés

Tulajdonságok (property) szerkesztés

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) szerkesztés

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ű szerkesztés

A Windows implementációja nem tesz különbséget a nagy- és kisbetűk között.[1]

Kommentek szerkesztés

A sor elejére írt pontosvessző (;) kommentet jelöl, az értelmező figyelmen kívül hagyja a sort.

; comment text

Egyéb változatok szerkesztés

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 szerkesztés

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 szerkesztés

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 szerkesztés

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 szerkesztés

Az escape karaktereket legelterjedtebben a visszaper (\) karakterrel használhatjuk.

Általános escape szekvenciák
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 szerkesztés

Opcionálisan globális tulajdonságok is értelmezhetőek, ha a szekciódefiníciók előtt lettek deklarálva.[2]

Hierarchia szerkesztés

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ó szerkesztés

Néhány implementáció kettőspontot (:) használ kulcs-érték elválasztónak (az egyenlőségjel helyett).

Whitespace szerkesztés

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 szerkesztés

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 szerkesztés

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 szerkesztés

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 szerkesztés

  1. GetPrivateProfileString function. Microsoft Developer Network. Microsoft. (Hozzáférés: 2012. június 2.)
  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 szerkeszté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 szerkesztés