Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Große Ini-Datei in TreeView einlesen (https://www.delphipraxis.net/114932-grosse-ini-datei-treeview-einlesen.html)

Aurelius 3. Jun 2008 07:00


Große Ini-Datei in TreeView einlesen
 
Hi DPler :hi:

Mit folgendem Code möchte ich alle Sections und Werte einer Ini-Datei in eine TreeView einlesen. Da es sich dabei aber um eine Reg-Datei (im Test ca. 75 MB) handelt sind entsprechend viele Einträge vorhanden. Leider bekomme ich hier bei weitem nicht alle Sections eingelesen (Sections.Count sagt ~254), außerdem dauert das Ganze ewig lange. Sowas wie Ini.getNextSection gibt es ja leider auch nicht. Ich hoffe ihr könnt mir bei beiden Problemen helfen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Ini : TIniFile;
    Sections, Werte : TStrings;
    i, j : integer;
    Knoten : TTreeNode;
begin
  Ini := TIniFile.Create('C:\Test.reg');
  Sections := TStringList.Create;
  Werte := TStringList.Create;
  try
    Ini.ReadSections(Sections);
    for i := 0 to Sections.Count - 1 do
    begin
      Knoten := rtv.Items.AddChild(nil,Sections[i]);
      Ini.ReadSectionValues(Sections[i],Werte);
      for j := 0 to Werte.Count - 1 do
      begin
        rtv.Items.AddChild(Knoten,Werte[j])
      end;
    end;
  finally
    Ini.Free;
    Sections.Free;
    Werte.Free;
  end;
end;

taaktaak 3. Jun 2008 08:33

Re: Große Ini-Datei in TreeView einlesen
 
Moin, Moin,

frü solche Datenmengen ist das TreeView vermutlich nicht gedacht. Sicherlich ist das VirtualTreeView da besser geeignet (kenne ich aber persönlich nicht). Weiter Möglichkeit: Konzept überdenken! Möglicherweise ist es ausreichend, zunächst nur die Sections in den Tree einzulesen und für jede Section ein Dummy-Child anzulegen (damit ein Plus vor der Node erscheint). Erst, wenn im Tree eine Section-Node angeklickt wird, die Werte dieser Section in den Tree einfügen. Muss man halt mal ausprobieren...

Aurelius 3. Jun 2008 08:38

Re: Große Ini-Datei in TreeView einlesen
 
Gut, damit hast du Recht. Allerdings löst das nicht das Problem mit der StringList, da dort ja leider nichta lle Werte eingelesen werden...

taaktaak 3. Jun 2008 08:44

Re: Große Ini-Datei in TreeView einlesen
 
Ohhh, das habe ich gar nicht beachtet. Die etwa 254 SectionNamen werden nicht in die Stringliste eingelesen? Komisch...

// edit: Sind da Sonderzeichen in der Datei?! Wäre spontan die einzig mögliche Erklärung

Aurelius 3. Jun 2008 08:50

Re: Große Ini-Datei in TreeView einlesen
 
Es werden nur 254 Sections eingelesen, alle anderen nicht. Sonderzeichen sollten nicht drin sein (sind ja alles Registry-Schlüssel-Namen in der Reg-Datei)

DeddyH 3. Jun 2008 08:55

Re: Große Ini-Datei in TreeView einlesen
 
Du benutzt TIniFile, oder? AFAIR kann diese nicht mit so großen Dateien umgehen. Such mal nach BigIniFile, damit könnte es gehen, leider weiß ich nicht mehr, wo ich die gefunden habe.

mkinzler 3. Jun 2008 08:56

Re: Große Ini-Datei in TreeView einlesen
 
Die ersten 254?

taaktaak 3. Jun 2008 09:02

Re: Große Ini-Datei in TreeView einlesen
 
Alternativ mit TMemIniFile lösen! Wie DeddyH schon bemerkte: TIniFile ist (unterschiedlich) limitiert; bei XP auf 64KB (wenn ich mich recht entsinne).

Aurelius 3. Jun 2008 09:05

Re: Große Ini-Datei in TreeView einlesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab das ganze mal fix angehängt. Ihr braucht nur eine große Test-Reg-Datei unter 'C:\Test.reg' (oder ihr ändert das ganze im Code um, habs nur fix hingeschludert.

Ja, es sind immer die ersten x Sections (auf meinem Laptop z.b. 164), wobei der letzte Section-Name nicht vollständig ist.

Dann werd ich mir mal TMemIniFile angucken..

taaktaak 3. Jun 2008 09:08

Re: Große Ini-Datei in TreeView einlesen
 
Ist kein Aufwand, du musst nur TIniFile in TMemIniFile ändern und an passender Stelle (sofern du die Daten auch speicherst) xxx.UpdateFile ergänzen, damit die Daten auch vom RAM auf die Festplatte kommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr.
Seite 1 von 2  1 2      

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