Start med INI filer

Tags:    delphi
Skrevet af Bruger #1425 @ 26.10.2002
En indføring til INI filer – Part I


Indledning:

Denne artikel består af to dele. Den første vil forklare hvordan man kan bruge INI filers mest almindelige egenskaber. Det vil sige, hvordan man kan læse og skrive strenge, tal, og boolean værdier.
Part II vil beskæftige sig med hvordan man lister indhold af en fil, lidt fejlhåndtering, hvordan man kan slette data og til sidst lidt blandede informationer.

Hvis du aldrig har set en ini fil før, er et eksempel her
[Sektion]
Nøgle=værdi
EnNøgleMere=en værdi
Her ser vi den simple opbygning med et sektionsnavn, hvorunder der er forskellige nøgler med en tilhørende værdi.

Det første skridt:

Før vi kan tilgå en INI fil, skal vi have lavet et såkaldt TINIFile objekt. Dette objekt ligger i INIFiles.pas, og vi skal derfor tilføje INIfiles til vores Uses section. Hvis du har startet et nyt projekt skulle din Uses sektion (Delphi6) se således ud:
Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, INIFiles;
Før vi kan arbejde med en INI fil skal TINIFile objektet skabes.
Var
  MyINI: TINIFile; // TINIFile objektet
  PathToINIFile: String;
Begin
    PathToINIFile := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)))+'test.ini';
  {Skab objektet}
  MyINI := TINIFile.Create(PathToINIFile);
  
  {Lav arbejde med objektet}
  //Det kommer vi til.. :)
  
  {Frigør hukommelse}
  MyINI.Free;
End;
Her så vi hvordan vi erklærede en variabel af typen TINIFile, og skabte objektet. Den ene parameter der blev send med i Create kaldet er stien til den INI fil vi skal arbejde med. I vores tilfælde, ligger den i samme sti som programmet og hedder test.ini Hvis vi ikke havde angivet en sti, men kun test.ini ville programmet have ledt efter filen i Windows mappen.

Fremover i artiklen vil jeg hverken skabe eller frigøre TINIFile objektet, da det foregår som beskrevet ovenfor.


At læse og skrive:

Nu er vi klar til at arbejde med INI filer, vi starter med at skrive til filen så vi har lidt mere at arbejde med.

At skrive til en INI fil

  //procedure WriteString(const Section, Ident, Value: String);
  MyINI.WriteString('MinSektion', 'Tekst', 'Se, det virker!');
  
  //procedure WriteInteger(const Section, Ident: String; Value: Longint); 
  MyINI.WriteInteger('MinSektion', 'Heltal', 1337);
  
  //procedure WriteFloat(const Section, Ident: String; Value: Double); 
  MyINI.WriteFloat('EndnuEnSektion', 'pi_ca', 22/7);

  //proceduure WriteBool(const Section, Ident: String; Value: Boolean);
  MyINI.WriteBool(‘EndnuEnSektion’, ‘ErINIFilerNyttige’, True);
 
Her skrev vi fire ting til filen
  1. En streng, nemlig ”Se, det virker!”
  2. Et heltal, 1337
  3. Et kommatal, tilnærmet Pi 22/7
  4. En boolean, True (Note: I filen gemmes True som 1 og False som 0)
Disse fire procedure kræver alle 3 parametre: Hvilken sektion der skal skrives til, hvilken nøgle og det data der skal gemmes.
Hvis vi kigger i INI filen nu, vil den se således ud:
[MinSektion]
Tekst=Se, det virker!
Heltal=1337
[EndnuEnSektion]
pi_ca=3,14285714285714
ErINIFilerNyttige=1
Som sagt repræsenteres boolean typens værdi ved et 1 (True) eller 0 (False). Så langt så godt, men hvordan henter vi data ind?

At læse fra en INI fil

Her har vi også forskellige funktioner til de forskellige datatyper, de bruges således:
  //function ReadString(const Section, Ident, Default: String): String;
  editText.Text := MyINI.ReadString('MinSektion', 'Tekst', 'Ikke fundet');

  //function ReadInteger(const Section, Ident: String; Default: Longint): Longint;
  editInteger.Text := IntToStr(MyINI.ReadInteger('MinSektion', 'Heltal', 0));

  //function ReadFloat (const Section, Ident: String; Default: Double): Double;
  editFloat.Text := FloatToStr(MyINI.ReadFloat('EndnuEnSektion', 'pi_ca', 3.14));

  //function ReadBool (const Section, Ident: String; Default: Boolean): Boolean;
  chkbool.Checked := MyINI.ReadBool('EndnuEnSektion', 'ErINIFilerNyttige', False);
De tager 3 parametre, de 2 er som vi kender det, sektionen og nøglen. Den sidste er den værdi der skal returneres hvis nøglen ikke blev fundet i filen (NB: For Integer, Float og Boolean betragtes en tom værdi som om at nøglen slet ikke blev fundet, dvs. Default værdien returneres.)

Afrunding

Dette var så part I af en indføring til INI filer. Der er lavet et tilhørende demo projekt som kan hentes på http://code.loftager.dk/udv/ini/ini_part_i.zip. Dette projekt indeholder eksemplerne fra denne artikel.
Eventuelle spørgsmål kan stilles enten via mail eller Udvikleren’s IRC kanal.



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (9)

User
Bruger #1748 @ 15.02.03 18:36
Great artikel om Ini filer :) Har lært noget :) mange tak!!
User
Bruger #1350 @ 08.04.03 16:52
ja flot artikel
User
Bruger #2959 @ 23.11.03 13:55
En god artikel, men der mangler en forklaring, til hvad INI filer bruges til
User
Bruger #5097 @ 26.01.04 21:33
Ja. Jeg er enig med Chadi.
Jeg vil også få lidt mere at vide hvilkt sted jeg skal skrive koderne....
for eksempel står der:

Før vi kan arbejde med en INI fil skal TINIFile objektet skabes.

Og så er der en kode.
Hvor er det?????????????
Gider du ikke skrive tilbage for min skyld
User
Bruger #5097 @ 09.05.04 20:26
Hvorfår bruge en INI fil, istædet for at bruge .txt
User
Bruger #1425 @ 18.11.04 19:45
#3 Til opbevaring af textdata. De er smarte til config-filer. Idag er XML dog ved at overtage denne rolle.
#4 Se det første kodeeksempel i artiklen. Der står en kommentar {skab objektet} - linien efter kaldes construtroren i TINIFile klassen og vi får et instansieret objekt. Du kan også hente eksempel programmet og se det deri :)

Beklager det tog så lang tid før jeg fik svaret ..
User
Bruger #7083 @ 12.01.05 19:02
Hmmm jeg kan ikke få det til at virke!
Jeg kan ikke engang få lov til at oprette ini-filen!
Kan det skyldes jeg bruger Delphi 7??
User
Bruger #5846 @ 11.07.05 17:50
Virkelig god artikel!
Jeg blev lidt forvirret af den anden INI Artikel her på stedet, men da jeg havde læst den her blev jeg glædeligt overrasket :D

5 herfra!

// Sieker
User
Bruger #10266 @ 29.11.06 18:22
Jeg får det ikke til at virke...

Den har åbenbart ikke nogen problemer med når jeg skriver det første i OnCreate, men det med at tilføje ting til INI-Filen kommer der en fejl ved, og programmet lukker...

Den opretter åbenbart ikke INIfilen, for den ligger ikke i mappen vor jeg gemte den. . .
Du skal være logget ind for at skrive en kommentar.
t