Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Unabhängig von Nummerierung Sections aus Ini lesen (https://www.delphipraxis.net/4178-unabhaengig-von-nummerierung-sections-aus-ini-lesen.html)

Stanlay Hanks 18. Apr 2003 09:35


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:
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;
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.

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:

Daniel B 18. Apr 2003 09:38

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:

BungeeBug 18. Apr 2003 09:41

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

Stanlay Hanks 18. Apr 2003 09:55

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

Tom 18. Apr 2003 10:13

Free gibt nur den Speicher frei und FreeAndnil setzt zusätzlich den Zeiger auf den Wert Nil. Im Programm kannst Du dann abfragen
Code:
if ... <> nil then
Aber: In Deinem Fall solltest Du die Variable NIni lokal deklarieren, da Du diese auch nur lokal benötigst:
Delphi-Quellcode:
Procedure ...
var
  Nini : TIniFile;
begin
  Nini := ...
  try
    ...
  finally
    NIni.Free;
  end;
  ...
FreeAndNil geht auch, gibt aber hier keinen Sinn mehr, da auf NIni nach dem Verlassen der Procedure kein Zugriff mehr möglich ist.

Christian Seehase 18. Apr 2003 12:55

Moin Stanlay,

schau Dir auch mal die Methoden ReadSection / ReadSectionValues von TIniFile an.

Stanlay Hanks 18. Apr 2003 13:28

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