Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ini.ReadSectionValues mit mehreren gleichen Names (https://www.delphipraxis.net/193316-ini-readsectionvalues-mit-mehreren-gleichen-names.html)

Helmi 16. Jul 2017 15:44

Ini.ReadSectionValues mit mehreren gleichen Names
 
Hallo,

folgende Ausgangssituation:
Ich hab eine INI-Datei, in der Definitionen für eine Oberfläche stehen (so grob gesagt).
Dabei schaut eine Section beispielhaft wie folgt aus:
Code:
[Input]
ID_INPUT_Eingabe10={Left=180;Top=35;TextColor=255,255,0;BackgroundColor=200,200,200;Height=45;Width=100}
ID_INPUT_Eingabe11={Left=180;Top=100;TextColor=0,0,0;BackgroundColor=255,225,200;Height=45;Width=100}
ID_INPUT_Eingabe10={Left=0;Top=0;TextColor=255,255,0;BackgroundColor=200,200,200;Height=45;Width=50}
Wie man sieht hab ich mehrere gleiche Names (was für mich ok ist).

Mit
Delphi-Quellcode:
Ini.ReadSectionValues
les ich den Inhalt von "Input" ein.

Nach dem Einlesen hab ich zwar in der StringList die gleiche Names, nur bei dem letzten "ID_INPUT_Eingabe10" den Wert (Value) vom ersten Eintrag.

Schau ich mir den Code hinter "ReadSectionValues" an, so ist das klar, da in ReadSection nach dem Namen gesucht wird und dieser ist schon an erster Stelle vorhanden.
Delphi-Quellcode:
procedure TIniFile.ReadSectionValues(const Section: string; Strings: TStrings);
var
  KeyList: TStringList;
  I: Integer;
begin
  KeyList := TStringList.Create;
  try
    ReadSection(Section, KeyList);
    Strings.BeginUpdate;
    try
      Strings.Clear;
      for I := 0 to KeyList.Count - 1 do
        Strings.Add(KeyList[I] + '=' + ReadString(Section, KeyList[I], ''))
    finally
      Strings.EndUpdate;
    end;
  finally
    KeyList.Free;
  end;
end;
Wie kann ich den gesamten "Inhalt" der Section auslesen? - so, wie es in der Section auch steht (trotz gleicher Names)?

DeddyH 16. Jul 2017 16:22

AW: Ini.ReadSectionValues mit mehreren gleichen Names
 
Ich behaupte: mit TIniFile gar nicht. Innerhalb einer Section sollen die Keys eindeutig sein, sind sie das nicht, kommt es zu dem von Dir geschilderten Phänomen. Du wirst Dir also selbst etwas schreiben müssen, das die Werte zu einem Schlüssel dann nicht als Einzelwert, sondern als Wertliste einliest.

Helmi 16. Jul 2017 16:29

AW: Ini.ReadSectionValues mit mehreren gleichen Names
 
Zitat:

Zitat von DeddyH (Beitrag 1376795)
Ich behaupte: mit TIniFile gar nicht.

die Antwort hab ich irgendwie erwartet

IniFiles macht es ja eigentlich erstmal richtig, jedenfalls bei den Names, nur bei den Values geht's schief.

[Edit]
Ich hab jetzt MemIniFile ausprobiert
und dort funktioniert es so, wie ich es brauche

Glados 16. Jul 2017 16:38

AW: Ini.ReadSectionValues mit mehreren gleichen Names
 
Zitat:

Ich hab jetzt MemIniFile ausprobiert
und dort funktioniert es so, wie ich es brauche
Wenn du die Autosave-Funktion noch nicht drin hast, sodass du kein Ini.Update; aufrufen musst nach einem Write, dann schreibe dir am besten eine Interposer-Klasse mit einem überschriebenem Destroy und dort rufst du Update vorher auf.
Dann ist die Handhabung von TMemIniFile und IniFile quasi gleich.

Helmi 16. Jul 2017 16:43

AW: Ini.ReadSectionValues mit mehreren gleichen Names
 
Zitat:

Zitat von Glados (Beitrag 1376798)
Zitat:

Ich hab jetzt MemIniFile ausprobiert
und dort funktioniert es so, wie ich es brauche
Wenn du die Autosave-Funktion noch nicht drin hast, sodass du kein Ini.Update; aufrufen musst nach einem Write, dann schreibe dir am besten eine Interposer-Klasse mit einem überschriebenem Destroy und dort rufst du Update vorher auf.
Dann ist die Handhabung von TMemIniFile und IniFile quasi gleich.

Ich lese nur aus der Ini-Datei, schreibe aber nicht rein.

Glados 16. Jul 2017 16:50

AW: Ini.ReadSectionValues mit mehreren gleichen Names
 
Zitat:

Ich lese nur aus der Ini-Datei, schreibe aber nicht rein.
Umso besser - weniger Stress.

Helmi 16. Jul 2017 16:53

AW: Ini.ReadSectionValues mit mehreren gleichen Names
 
Zitat:

Zitat von Glados (Beitrag 1376801)
Zitat:

Ich lese nur aus der Ini-Datei, schreibe aber nicht rein.
Umso besser - weniger Stress.

ja, von daher war es jetzt nicht tragisch von IniFile auf MemIniFile zu wechseln

himitsu 16. Jul 2017 19:09

AW: Ini.ReadSectionValues mit mehreren gleichen Names
 
Zitat:

Zitat von Helmi (Beitrag 1376802)
ja, von daher war es jetzt nicht tragisch von IniFile auf MemIniFile zu wechseln

Bis Embarcadero mal diesen "Bug" behebt.

Aber keine Sorge, das passiert eh nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 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