![]() |
2 ini-Dateien zusammenfassen (im Speicher)
Hallo,
kann man 2 ini-Dateien so zusammenlegen, dass ich nur noch über 1 variable darauf zugreife? also so z.B.: ersteINI:= TIniFile.Create('iniDatei1.ini') zweiteINI:= TIniFile.Create('iniDatei2.ini') ersteINI.add(zweiteINI) <-- so was und dann nur noch die Variable ersteINI verwenden. die beiden Ini-Dateien sollen also NICHT zu 1 Datei auf der Festlatte werden. danke Nachtrag: es soll ini-Datei heissen, nicht init-Datei |
AW: 2 init-Dateien zusammenfassen (im Speicher)
Grundsätzlich erstmal Nein, das geht nicht. (Ein INI-Objekt zeigt immer nur auf eine INI-Datei)
Du kannst aber alle Sections durchlaufen, und darin je alle Values (also 2 Schleifen) und die Werte dann in die andere INI einfügen. (bei doppelten Sektion-Werte-Paaren mußt du entsprechend reagieren ... prüst du das nicht ab, dann beommst du den Wert der kopierten INI und überschreibst ihn in der, wo es eingefügt wird, oder wenn man vorher prüft, ob's exisitert, dann kann man entweder überschreiben oder nicht). Aber wenn du das mit TIniFile machst, dann veränderst du die erste INI, da es ja direkt reingeschrieben wird. TMemIniFile (oder Dergleichen) könnte man verwenden, also alles wo es (erstmal) nur im RAM zusammengeführt wird, man aber ganz am Ende diese Änderungen nicht in der Datei speichert, also die Änderungen verwirft. Zu deinem Nachtrag: Ersten Beitrag editieren und darain auf den "erweiterten" Editor umschalten. |
AW: 2 ini-Dateien zusammenfassen (im Speicher)
Willst du die Konfiguration nur lesen und in deiner Anwendung nutzen? Wenn ja, dann würde ich gleich eine Konfigurations-Klasse schreiben, die nach und nach die INI-Dateien einliest.
|
AW: 2 ini-Dateien zusammenfassen (im Speicher)
Wenn du nach s.h.a.r.k's Tip nicht genau weißt wie du loslegen sollst könntest:
Baue eine Eigene Klasse:
Delphi-Quellcode:
Dann instanzierst du die Klasse und fügst alle Inifiles die du hast hinzu. Dann kannst dutype TIniFiles = class(TComponent) private Inis : TObjectList; public constructor Create(AOwner: TComponent); override; destructor Destroy; procedure Add(Inifile : TIniFile); function ReadString(const Section, Ident, Default: string): string; end; implementation { TIniFiles } procedure TIniFiles.Add(Inifile: TIniFile); begin Inis.Add(Inifile); end; constructor TIniFiles.Create(AOwner: TComponent); begin inherited; Inis := TObjectList.Create; Inis.OwnsObjects := True; end; destructor TIniFiles.Destroy; begin Inis.Free; end; function TIniFiles.ReadString(const Section, Ident, Default: string): string; var I: Integer; begin Result := ''; for I := 0 to Inis.Count do begin Result := (Inis.Items[I] as TIniFile).ReadString(Section,Ident,Default); if Result <> '' then Exit; end; end; auf die Instanz zugreifen und "ReadString" aufrufen um einen String auszulesen, alle anderen Methoden müsstest du dir dann nach dem obigen Schema selbst coden... |
AW: 2 ini-Dateien zusammenfassen (im Speicher)
Zitat:
Aber es hängt davon ab was du machen willst. Wenn Sektoren keine Rolle spielen und du nur an die Schlüssel und Werte willst, dann kann man beide Ini's in eine TStringList laden und Werte z. B. über Values auslesen. In diesem Fall könnte man beides mischen. Es wären dann aber keine richtigen Ini's mehr, denn bei der Aktion ginge die Sektoren Einteilung flöten. Der Rest würde aber wie bei Ini funktionieren. |
AW: 2 ini-Dateien zusammenfassen (im Speicher)
TMemIniFile hat GetStrings und SetStrings. Ein Merge im Speicher sollte sich also über den Umweg zweier zu mergender TStringLists machen lassen.
|
AW: 2 ini-Dateien zusammenfassen (im Speicher)
Du könntest eine dritte MemIniFile erzeugen
Delphi-Quellcode:
und die beiden anderen mit ReadSections und ReadSection auslesen und in diese schreiben. Dabei müßte die Datei mit der höheren Priorität als letztes beahndelt werden, da bereits vorhandene Einträge überschrieben würden. Und du könntest mit Rename einen Dateinamen vergeben und mit UpdateFile speichern, falls erforderlich. Alles in allem irgendwie kein schöner Weg. Was möchtest du denn machen?
MemIniFile = TMemIniFile.Create('');
|
AW: 2 ini-Dateien zusammenfassen (im Speicher)
Ich würde einfach eine neue Ini-Klasse von TCustomIniFile ableiten, dann verhält sich die Klasse eben wie eine Ini-Datei. :)
|
AW: 2 ini-Dateien zusammenfassen (im Speicher)
Es stellt sich die Frage ob der TE Klassen entwickeln kann.
Aber auch ein anderer Punkt sollte nicht vergessen werden: wenn zwei INI's zusammengeführt werden, kann es durchaus vorkommen, dass beide gleiche Abschnitte, bzw. Abschnitt-Bezeichnungen haben. Enthält eine Ini zwei gleiche Abschnitte, wird der zweite Abschnitt ignoriert. In diesem Fall müssen Abschnitte zusammengeführt werden, hier kommt aber das gleiche Problem in grün vor: kommen zwei gleichnamige Schlüssel vor, wird der zweite ignoriert. |
AW: 2 ini-Dateien zusammenfassen (im Speicher)
Bei gleichlautenden Schlüsseln muss natürlich der Zugriff entsprechend geregelt sein (Konzept), aber das ist ja nicht ungwöhnlich.
Globale Einstellungen per Default die per User aber überschrieben werden können. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz