AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein 2 ini-Dateien zusammenfassen (im Speicher)
Thema durchsuchen
Ansicht
Themen-Optionen

2 ini-Dateien zusammenfassen (im Speicher)

Ein Thema von michaelarban · begonnen am 31. Aug 2012 · letzter Beitrag vom 31. Aug 2012
Antwort Antwort
michaelarban

Registriert seit: 8. Jun 2010
9 Beiträge
 
#1

2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 12:12
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

Geändert von michaelarban (31. Aug 2012 um 12:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: 2 init-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 12:28
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: 2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 12:44
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#4

AW: 2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 12:48
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:
  
type
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;
Dann instanzierst du die Klasse und fügst alle Inifiles die du hast hinzu. Dann kannst du
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...
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: 2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 13:03
kann man 2 ini-Dateien so zusammenlegen, dass ich nur noch über 1 variable darauf zugreife?
Direkt nein, wie die anderen Kollegen schon richtig gesagt haben.

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.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#6

AW: 2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 13:12
TMemIniFile hat GetStrings und SetStrings. Ein Merge im Speicher sollte sich also über den Umweg zweier zu mergender TStringLists machen lassen.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: 2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 15:34
Du könntest eine dritte MemIniFile erzeugen MemIniFile = TMemIniFile.Create(''); 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?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: 2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 16:33
Ich würde einfach eine neue Ini-Klasse von TCustomIniFile ableiten, dann verhält sich die Klasse eben wie eine Ini-Datei.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: 2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 16:51
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: 2 ini-Dateien zusammenfassen (im Speicher)

  Alt 31. Aug 2012, 17:07
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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