Kako manipulirati INI datotekama iz Delphija

INI datoteke su tekstualne datoteke koje se koriste za pohranu konfiguracijskih podataka aplikacije.

Čak iako Windows preporučuje korištenje Windows registra za pohranjivanje konfiguracijskih podataka koji se odnose na aplikaciju, a u mnogim će slučajevima INI datoteke brže omogućiti programu pristup njegovim postavkama. Sam Windows čak koristi INI datoteke; desktop.ini i boot.ini biti samo dva primjera.

Jedna jednostavna upotreba INI datoteka kao mehanizma za spremanje statusa jest spremanje veličine i lokacije obrasca ako želite da se obrazac ponovno pojavi na prethodnom položaju. Umjesto pretraživanja cjeline baza podataka za pronalaženje veličine ili lokacije koristi se INI datoteka.

Format datoteke INI

Datoteka postavki postavki inicijalizacije ili konfiguracije (.INI) tekstualna je datoteka s ograničenjem od 64 KB podijeljena na odjeljke, a svaki sadrži nula ili više tipki. Svaki ključ sadrži nulu ili više vrijednosti.

Evo primjera:

 [SectionName]
keyname1 = vrijednost
;komentar
keyname2 = vrijednost

instagram viewer

Nazivi odjeljaka zatvoreni su u zagradama i moraju započeti na početku retka. Nazivi odjeljaka i ključa razlikuju velika i mala slova (slučaj nije važan) i ne mogu sadržavati znakove razmaka. ključno ime slijedi znak jednakosti ("="), opcionalno okružen razmačnim znakovima, koji se zanemaruju.

Ako se isti odjeljak pojavljuje više puta u istoj datoteci ili ako se ista tipka pojavljuje više puta u istom odjeljku, tada prevladava posljednja pojava.

Ključ može sadržavati niz, cijeli broj ili booleanvrijednost.​

Delphi IDE koristi INI format datoteke u mnogim slučajevima. Na primjer, .DSK datoteke (postavke radne površine) koriste INI format.

TIniFile klasa

Delphi nudi TIniFile klase, proglašen u inifiles.pas Jedinica s metodama za pohranu i preuzimanje vrijednosti iz INI datoteka.

Prije rada s metodama TIniFile, morate stvoriti instancu klase:

namjene inifiles;
...
var
IniFile: TIniFile;
početi
IniFile: = TIniFile. Stvaranje ( 'myapp.ini');

Gornji kod stvara IniFile objekt i dodjeljuje 'myapp.ini' jedinom svojstvu klase - the Svojstvo FileName — Koristi se za određivanje imena INI datoteke koju koristite.

Kod koji je gore napisan traži za myapp.ini datoteku u \ Windows imenik. Bolji način pohrane podataka aplikacija je u mapu aplikacije - samo odredite puno ime puta datoteke za Stvoriti metoda:

// stavite INI u mapu aplikacija,
// neka ima naziv aplikacije
// i 'ini' za proširenje:

iniFile: = TIniFile. Stvorite (ChangeFileExt (aplikacija). ExeName, '. Ini'));

Čitanje s INI-ja

TIniFile klasa ima nekoliko metoda "čitanja". ReadString glasi a vrijednost niza s ključa, ReadInteger. ReadFloat i slično koriste se za čitanje broja s ključa. Sve metode "čitanja" imaju zadanu vrijednost koja se može upotrijebiti ako unos ne postoji.

Na primjer, ReadString je deklariran kao:

funkcija ReadString (const Odjeljak, identitet, zadano: string): string; nadglasati;

Pišite na INI

TIniFile ima odgovarajuću "write" metodu za svaku metodu "read". To su WriteString, WriteBool, WriteInteger itd.

Na primjer, ako želimo da se program sjeća imena posljednje osobe koja ga je koristila, kada je bila i koje su glavne koordinate obrasca, mogli bismo uspostaviti odjeljak pod nazivom Korisnici, ključna riječ zvana Posljednji, Datum za praćenje informacija i odjeljak pod nazivom plasman s ključevima Vrh, Lijevo, Širina, i Visina.

project1.ini
[Korisnik]
Zadnji = Žarko Gajić
Date = 01/29/2009
[Položaja]
Najbolje = 20
Lijevo = 35
Širina = 500
Visina = 340

Imajte na umu da je ključ imenovan Posljednji drži vrijednost niza, Datum sadrži vrijednost TDateTime i sve tipke u plasman odjeljak sadrži cijelu vrijednost.

OnCreate događaj glavnog obrasca savršeno je mjesto za spremanje koda potrebnog za pristup vrijednostima u inicijalizacijskoj datoteci aplikacije:

postupak TMainForm. FormCreate (pošiljalac: TObject);
var
appINI: TIniFile;
LastUser: string;
LastDate: TDateTime;
početi
appINI: = TIniFile. Stvorite (ChangeFileExt (aplikacija). ExeName, '. Ini'));
probati
// ako nijedan zadnji korisnik ne vrati prazan niz
LastUser: = appINI.ReadString ('Korisnik', 'Zadnji', '');
// ako se ne vrati današnji datum današnjeg datuma
LastDate: = appINI.ReadDate ('Korisnik', 'Datum', Datum);
// pokazati poruku
ShowMessage ('Ovaj je program prethodno koristio' + LastUser + 'on' + DateToStr (LastDate));
Vrh: = appINI.ReadInteger ('Položaj', 'Vrh', Vrh);
Lijevo: = appINI.ReadInteger ('Položaj', 'Lijevo', Lijevo);
Širina: = appINI.ReadInteger ('Položaj', 'Širina', Širina);
Visina: = appINI.ReadInteger ('Položaj', 'Visina', Visina);
konačno
appINI.Free;
kraj;
kraj;

OnClose događaj glavnog oblika idealan je za Spremi INI dio projekta.

postupak TMainForm. FormClose (pošiljalac: TObject; var Akcija: TCloseAction);
var
appINI: TIniFile;
početi
appINI: = TIniFile. Stvorite (ChangeFileExt (aplikacija). ExeName, '. Ini'));
probati
appINI.WriteString ('Korisnik', 'Zadnji', 'Žarko Gajić');
appINI.WriteDate ('Korisnik', 'Datum', Datum);
s appINI, MainForm čini
početi
WriteInteger ('Položaj', 'Vrh', Vrh);
WriteInteger ('Položaj', 'Lijevo', Lijevo);
WriteInteger ('Položaj', 'Širina', Širina);
WriteInteger ('Položaj', 'Visina', Visina);
kraj;
konačno
appIni. Besplatno;
kraj;
kraj;

Odjeljci INI

EraseSection briše cijeli odjeljak INI datoteke. ReadSection i ReadSections ispunite TStringList objekt s imenima svih odjeljaka (i imenima ključeva) u INI datoteci.

Ograničenja i nedostaci INI

Koristi se klasa TIniFile Windows API što nameće ograničenje od 64 KB za INI datoteke. Ako trebate pohraniti više od 64 KB podataka, trebali biste koristiti TMemIniFile.

Drugi problem može se pojaviti ako imate odjeljak s više od 8 K vrijednosti. Jedan od načina rješavanja problema je pisanje vlastite verzije metode ReadSection.

instagram story viewer