Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi *.ini lesen, vergleichen und erweitern (https://www.delphipraxis.net/58328-%2A-ini-lesen-vergleichen-und-erweitern.html)

KroKro 5. Dez 2005 18:01


*.ini lesen, vergleichen und erweitern
 
Hallo an alle erstmal, Ich bin Neu hier im Forum habe mit dem Proggen gerade erst angefangen, ich ahbe da ne Aufgabe, bei der ich ein paar Fragen habe, hoffe ihr könnt oder wollt mir dabei helfen!!!

Also folgendes, ich möchte 2 Ini Files vergleichen lassen also die einzelnen Sectionen in der ini, und wenn in einer Ini eine Section drin ist, die in der anderen nicht existiert, soll diese hinzugefügt werden, Bsp.:

IniNeu

[SectionA]
Bla = Bla
Zorck = Zorck

iniAlt

[SectionA]
Bla = Bla
Zorck =

Nun da in der IniNeu Zorck = Zorck ist, soll die iniAlt so beschrieben werden wie IniNeu, das die beiden identisch sind.

ich hoffe ihr versteht was ich meine, habe damit angefangen mich mal einzulesen und habe mich entschieden "ReadSection", "ReadSectionValues" zu benutzen aus der Klasse TIniFile.

bitte helft mir, habe echt probleme mit!!!!! Ein richtiges brett vor dem Kopf :wall:

chaosben 6. Dez 2005 05:50

Re: *.ini lesen, vergleichen und erweitern
 
Hallo KroKro!

Herzlich Willkommen in der DelphiPraxis! :hi:

So, dann lass uns mal über dein Problem reden/schreiben. :)
Im Groben ahne ich, was du willst. Nur die Feinheiten sind mir nicht ganz klar. Da du ja die neue Datei updaten willst, brauchst du eine paar Regeln, nach denen du arbeitest.
Was passiert ...
  • ... mit einer nicht vorhandenen Section?
  • ... mit einem nicht vorhanden Value?
  • ... mit einem vorhanden Value mit falschem Wert?
  • ... mit einem vorhanden Value mit falschem Typ?
  • ...
Wenn du diese Fragen geklärt hast, kannst du deine schon angeführten Funktionen nutzen um im fröhlichen Reigen durch die Datei zu hüpfen und hier und da ein paar Änderungen zu machen. Du könnstes mit ReadSections beginnen und darin durch jede Section der neuen Datei gehen und die Änderungen in der alten machen.

Aber ... btw ... wenn die alte Datei genauso aussehen soll wie die Neue .... tuts da nicht auch ein smartes "FileCopy"? :)

KroKro 6. Dez 2005 12:34

Re: *.ini lesen, vergleichen und erweitern
 
Hi ChaosBen, danke für deine Antwort!!!

- Eine bereits Vorhandene Section soll in ruhe gelassen werden.
- Das nicht vorhanden Value soll hinzugefügt werden wie in der neuen ini.
- Wenn der Typ oder der Wert sich nach dem Update nicht geändert haben, sollen die so bleiben wie sie
sind. Sobald sich in der neuen Ini ein Wert geändert hat, soll dieser auch verändert werden.

chaosben 6. Dez 2005 18:07

Re: *.ini lesen, vergleichen und erweitern
 
Um nochmals meinen Spruch von oben aufzuwärmen:
Am Ende sehen doch beide Dateien haargenau gleich aus, richtig? Wenn ja, dann würde ich das ganze auf
Delphi-Quellcode:
DeleteFile(OldFile);
CopyFile(NewFile, OldFile)
beschränken.

KroKro 7. Dez 2005 09:12

Re: *.ini lesen, vergleichen und erweitern
 
Ahhh tut mir leid, habe mich voll vertan, ich möchte das die Values in ruhe gelassen werden d.h

Update Ini

Feld = "Text"
Feld2 = "Text"

Ini

Feld = "anderer Text"


So, jetzt soll Feld2 aus der UpdateIni in die ini eingefügt werden, jedoch das Feld mit dem Wert "anderer Text" soll in ruhe gelassen werden.

Wenn z.B. eine Section komplett in der ini nicht existiert, soll diese aus der UpdateIni eigefügt werden.

Ich hoffe diese beschreibung bringt mehr, ich bin einfach zu schlecht im erklären!!! Sorry und danke für deine Hilfe!!!!

marabu 7. Dez 2005 09:28

Re: *.ini lesen, vergleichen und erweitern
 
Hallo Kroko,

um nur fehlende Einträge in einer Steuerdatei zu ergänzen könntest du so vorgehen (ungetestet):

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  Classes,
  IniFiles,
  SysUtils;

var
  iniAlt, iniNeu: TMemIniFile;
  iSection, iValue: integer;
  s, sSections: TStrings;

begin
  if not (ParamCount in [1..2]) then Halt;
  if not FileExists(ParamStr(1)) then Halt;
  iniAlt := TMemIniFile.Create(ParamStr(1));
  iniNeu := TMemIniFile.Create(ParamStr(2));
  s := TStringList.Create;
  sSections := TStringList.Create;
  iniAlt.ReadSections(sSections);
  for iSection := 0 to Pred(sSections.Count) do
  begin
    iniAlt.ReadSection(sSections[iSection], s);
    for iValue := 0 to Pred(s.Count) do
      if not iniNeu.ValueExists(sSections[iSection], s[iValue]) then
        iniNeu.WriteString(
          sSections[iSection], s[iValue],
          iniAlt.ReadString(sSections[iSection], s[iValue], '')
        );
  end;
  sSections.Free;
  s.Free;
  iniNeu.UpdateFile;
  iniNeu.Free;
  iniAlt.Free;
end.
Grüße vom marabu

KroKro 7. Dez 2005 09:53

Re: *.ini lesen, vergleichen und erweitern
 
ich werde es mal testen, vielen dank!!!!!!!!!!!

KroKro 7. Dez 2005 10:32

Re: *.ini lesen, vergleichen und erweitern
 
SUPER!!!!!

Läuft prima, musste nur ein paar sachen ändern und jetzt läuft es einwandfrei!!!!!

Ich danke euch beiden vielmals für eure Hilfe!!

DANKE!!!!!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz