Results 1 to 11 of 11

Thread: INI file gebruiken

  1. #1
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Question INI file gebruiken

    Met CodeTyphon in Windows 8.1:

    Code:
    [CODE
    Uses ... IniFiles;  
    //********************* 
        { public declarations }
        vSpeler1Naam, vSpeler2Naam, vSpeler3Naam, vSpeler4Naam: String;
    //*********************
    procedure TFmain.FormCreate(Sender: TObject);
      ....
       vSpeler1Naam:= 'Leo';
       vSpeler2Naam:= 'Mariette';
       vSpeler3Naam:= 'Felix';
       vSpeler4Naam:= 'Rita';
    //********************* 
       StringGrid1.Cells[1, 0]:= vSpeler1Naam;
       StringGrid1.Cells[2, 0]:= vSpeler2Naam;
       StringGrid1.Cells[3, 0]:= vSpeler3Naam;
       StringGrid1.Cells[4, 0]:= vSpeler4Naam;
     ....
    CODE]
    Wat ik graag zou willen is dat de hard gecodeerde namen: ‘Leo,..enz...’ aangepast(veranderd) kunnen worden via een simplele tekst file, dus waarschijnlijk een ‘INI’ file.
    Ben geen expert in programmeren en weet niet hoe dit kan opgelost worden.

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Als je met meerdere groepen gaat werken, dan is een ini bestand de juiste plek daarvoor
    [groep1]
    tekst1=f;f;ff;
    tekst2=f;f;ff;

    [groep2]
    nummer1=222
    nummer1=222
    Als je maar 1 groep hebt, zal je eens moeten kijken naar TStringlist. Die heeft 2 properties genaamd names[] en values[]. En dan hoef je geen groep te defineren.

    voorbeeld : http://forum.lazarus.freepascal.org/...?topic=29412.0 of http://www.delphibasics.co.uk/RTL.asp?Name=tstringlist
    Delphi is great. Lazarus is more powerfull

  3. #3
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685
    Sorry dat ik uw info iet snap.
    Wat ik wil is dat de namen v.d. spelers in de variables:
    vSpeler1Naam:= 'Leo';
    vSpeler2Naam:= 'Mariette';
    vSpeler3Naam:= 'Felix';
    vSpeler4Naam:= 'Rita';
    kunnen aangepast worden.
    Vandaag zijn het die vier mensen(Leo, Mariette, Felix, Rita), morgen kunner er van de vier 1 of 2 of 3 of alla 4 veranderen.
    Daar mijn kenne'is beperkt is in programmeren, dacht ik te lezen dat een 'INI' bestand de oplossing kan zijn.
    Daar er dan enkel in dit tekstbestandje de namen v.d. spelers aangepast mooten worden.
    Weet niet hoe de "DBwizen.ini" op te stellen en de nodige code om de "vSpeler*Naam" op te vullen met de INI.

  4. #4
    Joost JvZijl's Avatar
    Join Date
    Jul 2014
    Location
    Vijfhuizen
    Posts
    173
    En eventueel in de code zelf met een record ?
    b.v.
    Code:
     Type
        NamenSpelers = record
          Naam1 : String[255];
          Naam2 : String[255];
          Naam3 : String[255];
          Naam4 : String[255];
        end;
    
    var
      NamenRecord  : NamenSpelers;
      NamenFile       : file of NamenSpelers;
    En dan de namen in je code kunnen aanpassen ?
    Ik weet dat het niet is wat je vraagt maar misschien een oplossing.
    Lazarus 1.6/fpc 3.0 fpsrc 3.0 on osx 10.11.5

  5. #5
    Zie http://wiki.freepascal.org/Using_INI_Files

    Ik denk dat er dit bedoeld wordt:
    Code:
    [Spelers]
    Speler1=Leo
    Speler2=Mariette
    Speler3=Felix
    Speler4=Rita
    Delphi Code:
    1. uses IniFiles;
    2.  
    3. procedure TForm1.FormCreate(Sender: TObject);
    4. var
    5.   INI: TINIFile;
    6. begin
    7.    INI := TINIFile.Create('Spelers.ini');
    8.    try
    9.      vSpeler1Naam:= INI.ReadString('Spelers','Speler1','');
    10.      vSpeler2Naam:= INI.ReadString('Spelers','Speler2','');
    11.      vSpeler3Naam:= INI.ReadString('Spelers','Speler3','');
    12.      vSpeler4Naam:= INI.ReadString('Spelers','Speler4','');
    13.    finally
    14.      INI.Free;
    15.    end;
    16.  
    17.    StringGrid1.Cells[1, 0]:= vSpeler1Naam;
    18.    StringGrid1.Cells[2, 0]:= vSpeler2Naam;
    19.    StringGrid1.Cells[3, 0]:= vSpeler3Naam;
    20.    StringGrid1.Cells[4, 0]:= vSpeler4Naam;
    21.  
    22. end;

  6. #6
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Thumbs up

    rvk,
    Ik denk dat er dit bedoeld wordt: ...
    Met dank zie ik opnieuw dat u mij snel begrijpt.
    Het werkt prima.
    Tot later !!!

  7. #7
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Om vier namen op te slaan is een inifile nogal omslachtig. Wat ik al eerder heb verteld, kan je beter in deze situatie gebruik maken van TStringlist
    Delphi Code:
    1. unit clSpelerlijst;
    2.  
    3. interface
    4.  
    5. uses classes, sysutils;
    6.  
    7. type TSpelers = class
    8.   fSpelerlijst : TStringlist;
    9.   fFileName    : string;
    10.   fAutoSave    : boolean;
    11.   public
    12.     constructor create(const aFilename : string; const aAutoSave : boolean = false);
    13.     destructor  Destroy; override;
    14.  
    15.     function load : boolean;
    16.     function save : boolean;
    17.     function readname(const aNumber: integer): string;
    18.     procedure new(const aName : string);
    19.     procedure modify(const aNumber: integer; const aNaam : string);
    20.     procedure modname(const aOldName, aName: string);
    21. end;
    22.  
    23. implementation
    24.  
    25. { TSpelers }
    26.  
    27. constructor TSpelers.create(const aFilename : string; const aAutoSave : boolean = false);
    28. begin
    29.   fSpelerlijst := TStringlist.create;
    30.   fFileName    := aFilename;
    31.   fAutoSave    := aAutoSave;
    32. end;
    33.  
    34. destructor TSpelers.Destroy;
    35. begin
    36.   save;
    37.   fSpelerlijst.Free;
    38.   inherited;
    39. end;
    40.  
    41. function TSpelers.load: boolean;
    42. begin
    43.   result := true;
    44.   try
    45.     if FileExists(fFilename) then
    46.       fSpelerlijst.LoadFromFile(fFilename)
    47.     else
    48.       result := false;
    49.   except
    50.     result := false;
    51.   end;
    52. end;
    53.  
    54. procedure TSpelers.modify(const aNumber: integer; const aNaam : string);
    55. begin
    56.   if (aNumber > 0) and  (aNumber <= fSpelerlijst.Count) then
    57.     fSpelerlijst[aNumber - 1] := aNaam;
    58.   if fAutoSave then Save;
    59. end;
    60.  
    61. procedure TSpelers.modname(const aOldName, aName: string);
    62. var number : integer;
    63. begin
    64.   number := fSpelerlijst.IndexOf(aOldName);
    65.   fSpelerlijst[number] := aName;
    66.   if fAutoSave then Save;
    67. end;
    68.  
    69. procedure TSpelers.new(const aName: string);
    70. begin
    71.   fSpelerlijst.Append(aName);
    72.   if fAutoSave then Save;
    73. end;
    74.  
    75. function TSpelers.readname(const aNumber: integer): string;
    76. begin
    77.   if (aNumber > 0) and  (aNumber <= fSpelerlijst.Count) then
    78.     result := fSpelerlijst[aNumber - 1]
    79.   else
    80.     result := '';
    81. end;
    82.  
    83. function TSpelers.save: boolean;
    84. begin
    85.   result := true;
    86.   try
    87.     fSpelerlijst.SaveToFile(fFilename)
    88.   except
    89.     result := false;
    90.   end;
    91. end;
    92.  
    93. end.
    Delphi Code:
    1. procedure TForm1.Button1Click(Sender: TObject);
    2. var fSpelerlijst : TSpelers;
    3. begin
    4.   fSpelerlijst := TSpelers.create('c:\temp\spelers.txt',true);
    5.   try
    6.     if fSpelerlijst.load then
    7.     begin
    8.       memo1.Lines.Add('laad spelers bestand');
    9.       memo1.Lines.Add('lijst met namen:');
    10.       memo1.Lines.Add(fSpelerlijst.readname(1));
    11.       memo1.Lines.Add(fSpelerlijst.readname(2));
    12.       memo1.Lines.Add(fSpelerlijst.readname(3));
    13.       memo1.Lines.Add(fSpelerlijst.readname(4));
    14.     end;
    15.     if fSpelerlijst.readname(1) = '' then
    16.       memo1.Lines.Add('lijst leeg nieuwe namen invoeren');
    17.     fSpelerlijst.new('Klaas');
    18.     fSpelerlijst.new('Pieter');
    19.     fSpelerlijst.new('Jan');
    20.     fSpelerlijst.new('Chef');
    21.     memo1.Lines.Add('lijst met namen (2):');
    22.     memo1.Lines.Add(fSpelerlijst.readname(1));
    23.     memo1.Lines.Add(fSpelerlijst.readname(2));
    24.     memo1.Lines.Add(fSpelerlijst.readname(3));
    25.     memo1.Lines.Add(fSpelerlijst.readname(4));
    26.     memo1.Lines.Add('speler 2 aanpassen');
    27.     fSpelerlijst.modify(2,'John');
    28.     memo1.Lines.Add('lijst met namen (3):');
    29.     memo1.Lines.Add(fSpelerlijst.readname(1));
    30.     memo1.Lines.Add(fSpelerlijst.readname(2));
    31.     memo1.Lines.Add(fSpelerlijst.readname(3));
    32.     memo1.Lines.Add(fSpelerlijst.readname(4));
    33.   finally
    34.     fSpelerlijst.Free;
    35.   end;
    36. end;
    Maar goed. Klant tevreden. Alleen een andere manier geven is ook een manier van support
    Attached Files Attached Files
    Delphi is great. Lazarus is more powerfull

  8. #8
    Quote Originally Posted by jkuiper View Post
    Om vier namen op te slaan is een inifile nogal omslachtig.
    Dus een ini-bestand is omslachtiger dan jouw voorbeeld via een complete class

    Alleen een andere manier geven is ook een manier van support
    Klopt. Hoewel enige rekening houden met de expertise-level van de vrager daar ook toe behoort

    Maar het is een mooi voorbeeld

  9. #9
    Senior Member
    Join Date
    Sep 2004
    Location
    BELGIE(Vilvoorde)
    Posts
    685

    Thumbs up

    jkuiper,
    Jouw code zal zeker werken!
    MAAR ... zoals "rvk" uitlegt:
    Hoewel enige rekening houden met de expertise-level van de vrager daar ook toe behoort
    Het is wel degelijk juist dat mijn niveau van programmeren niet tussen de experten zit.

    Voor mij, op mijn 67, is programmeren een echte hobby, waar ik de resultaten gebruik voor sociale contacten.
    Ik maak deel uit van een groep gepensioneerden waar het huidige project 'Wiezen' (een kaartspel) een nuttige tool zal zijn. Dank zij het programma zullen zij de berekeningen niet meer uit het hoofd moeten maken.

    De kunst van "rvk" is dat hij het telkens zeeeer eenvoudig uitlegt met simpele bijhorende code.
    In ieder geval hartelijk bedankt voor uw inspanning.

  10. #10
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Dus een ini-bestand is omslachtiger dan jouw voorbeeld via een complete class
    Het kan altijd simpeler. Maar ik hou af en toe van knutselen
    Delphi is great. Lazarus is more powerfull

  11. #11
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Je kan geloof ik ook een sectie ruw in handen krijgen met readsections iirc. Dan kan je gewoon ini files, en tstringlist achtig gedrag (en dubbele keys e.d.) gebruiken voor secties die b.v. rulesets zijn of andere niet standaard types.

    Het probleem is echter dat met wat voor workaround systeem dan ook, ini file is niet echt geschikt om meerdere dezelfde types op te slaan. En dan gaat het voordeel van een standaard een beetje weg.

    Hetzelfde geldt helaas ook voor TXMlConfig wat ik gebruik voor de meeste configuratie files. Maar je kan het daar wel wat makkelijker verbergen door meervoudige items een eigen geneste sectie te geven.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •