![]() |
Unabhängig von Nummerierung Sections aus Ini lesen
Hallo zusammen. Ich hatte schon mal ein ähnliches Problem gepostet. Ich hab's dann bleiben lassen und was neues probiert. Aber jetzt hab ich wieder ein ähnliches Problem.
Ich habe eine Ini-Datei die wie folgt aufgebaut ist: ---------------------------- [Allgemein] Anzahl = 15 //Anzahl der Notizen in der Ini Datei [Notiz1] //Eigentliche Notiz Betreff = Betreff 1 [Notiz2] Betreff = Betreff 2 usw.... ---------------------------- Mein Problem ist es, diese Notizen in eine Listbox zu bekommen. Ich hab das so gemacht:
Delphi-Quellcode:
Das funktioniert auch wunderbar, wenn die Notizen alle schön durchnummeriert sind. Also [Notiz1],[Notiz2],[Notiz3] usw. Aber wenn ich dann eine Notiz lösche, lösche ich einfach die Section in der die Notiz steht. Also sind die Notizen nicht mehr durchnummeriert.
procedure TForm1.NotizenLesen;
begin Try NIni := TIniFile.Create(PathS+'Notizen.ini'); //PathS ist der Programmordner Anzahl :=NIni.ReadInteger('Allgemein','Anzahl',0); IF Anzahl <> 0 THEN begin For Anzahl := 1 To Anzahl do begin IF NIni.SectionExists('Notiz'+IntToStr(Anzahl)) THEN ListBox1.Items.Add('Notiz' + IntToStr(Anzahl)); end; end; finally NIni.Free; end; end; Gibt es einen Weg, unabhängig von der Nummerierung alle Einträge in die Listbox zu bekommen??? Danke schon mal im Voraus. Man ließt sich. Stanlay :coder: |
Hallo,
kleiner Tip am Rande. IniFile.Create vor das try! Im im -Teil, wäre es besser FreeAndNil(Nini); zu nehmen. Grüsse, Daniel :hi: |
Hi,
die einzige wirkliche Lösung is das INI-File nach jedem löschen komplett neu zuschreiben.Sonst hast du immer das beschreibene Chaos + einen oder mehr gratis Lesefehler weil da nen paar Sectionen nicht vorhanden sind :) MfG BungeeBug |
Du meinst also, dass man die Ini Datei kopieren, auslesen und dann Schritt für Schritt neu aufbauen soll, oder? Klingt irgendwie vernüftig.
Zu Daniel: Was ist der Unterschied zwischen NIni.Free und FreeAndNil(Nini); ? Hab mal in der Hilfe nachgeschaut: "Die Prozedur gibt eine Objektreferenz frei und ersetzt die Referenz mit nil." Danke trotzdem für die schnellen Antworten |
Free gibt nur den Speicher frei und FreeAndnil setzt zusätzlich den Zeiger auf den Wert Nil. Im Programm kannst Du dann abfragen
Code:
Aber: In Deinem Fall solltest Du die Variable NIni lokal deklarieren, da Du diese auch nur lokal benötigst:
if ... <> nil then
Delphi-Quellcode:
FreeAndNil geht auch, gibt aber hier keinen Sinn mehr, da auf NIni nach dem Verlassen der Procedure kein Zugriff mehr möglich ist.
Procedure ...
var Nini : TIniFile; begin Nini := ... try ... finally NIni.Free; end; ... |
Moin Stanlay,
schau Dir auch mal die Methoden ReadSection / ReadSectionValues von TIniFile an. |
Genial. Dann kann ich mir ja die ganze Sucherei mit allen möglichen Schleifen sparen. Vielen Dank :hello: :bounce2: :bounce1: :firejump: :bouncing4: :lol: :nerd: :party: :witch:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 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-2025 by Thomas Breitkreuz