AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Große Ini-Datei in TreeView einlesen

Ein Thema von Aurelius · begonnen am 3. Jun 2008 · letzter Beitrag vom 2. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#1

Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 08:00
Hi DPler

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;
Jonas
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 09:33
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...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#3

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 09:38
Gut, damit hast du Recht. Allerdings löst das nicht das Problem mit der StringList, da dort ja leider nichta lle Werte eingelesen werden...
Jonas
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 09:44
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
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#5

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 09:50
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)
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 09:55
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 09:56
Die ersten 254?
Markus Kinzler
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#8

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 10:02
Alternativ mit TMemIniFile lösen! Wie DeddyH schon bemerkte: TIniFile ist (unterschiedlich) limitiert; bei XP auf 64KB (wenn ich mich recht entsinne).
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#9

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 10:05
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..
Angehängte Dateien
Dateityp: zip test_462.zip (3,2 KB, 14x aufgerufen)
Jonas
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#10

Re: Große Ini-Datei in TreeView einlesen

  Alt 3. Jun 2008, 10:08
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.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:26 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