[Delphi 5] INI-Dateien

Kann mir jemand ne Adresse schreiben, wo ich ein Control zur Bearbeitung von INI-Dateien herunterladen kann ? Wäre praktisch, wenn das Control nicht allzu kompliziert ist.

Vielen Dank

Christian

Es gibt ja die TINIFile-Klasse du Pfeiffe.

Danke für die Pfeiffe ! :frowning:

Sag auch…das wusste ich auch… aber irgendwie klappt das bei mir nicht. Und zudem ist es recht kompliziert damit !

Findest Du nicht, dass Du Dich da etwas im Ton vergriffen hast?
Ich kann mich erinnern, dass ich die INI-Dateien immer „von Hand“ ausgelesen habe, bis ich dann irgendwann die TINIFile entdeckt habe.
Direkt mit der Nase draufgestossen wird man da nicht!!

Gruss, Niels

Hallo,

kompliziert ist das eigentlich nicht. Hier ein Codebeispiel:

begin
 ApplDir := ExtractFilePath(Application.ExeName);
 INIDatei := TIniFile.Create(ApplDir + 'NFPZentrale.ini');
 with INIDatei do try
 Geschw[0] := ReadInteger('Profile', 'Speed01', 110);
 Geschw[1] := ReadInteger('Profile', 'Speed02', 100);
 Geschw[2] := ReadInteger('Profile', 'Speed03', 100);
 MaxLinkRad := ReadInteger('Optimization', 'LinkRadius' , 15000);
 Zeitfaktor := ReadInteger('Optimization', 'TimeFactor' , 70);
 NFPCount := ReadInteger('Optimization', 'NofDealers', 5);
 Netz := ApplDir + 'daten\' + ReadString('Misc', 'CalcNet', 'NET\_E6');
 SaveStatus := ReadBool ('Misc', 'SaveStatus', false);
 finally
 Free;
 end{finally};

Kannst auch mit Readsection ganze Sektionnen in eine StringList einlesen!

Gruss, Niels

ja, dann kennt ihr eben Delphi nicht :smile:
Ausserdem hat die mehr oder weniger gleichen Methoden wie TRegistry.
INIs sind eh veraltet.

Hallo Roger,

mir ging es darum, die Frage zu beantworten und nicht darum zu beurteilen, ob INI-Files veraltet sind oder nicht!
Zu manchen Zwecken verwende ich immer noch gerne INI-Files (speziell im obigen Beispiel geht es darum, in einer Datei Geschwindigkeitsprofile fuer einen Routenplaner zu speichern, das hat mit dem urspruenglichen Zweck der INI-Files nichts zu tun. Ich halte nichts davon, alle moeglichen Anwendungsdaten in die Registry zu schreiben, da sollte man schon etwas selektieren).
Im Uebrigen: wenn Du etwas Besseres kennst, dann schreib das doch einfach und werde nicht ausfaellig.
Schliesslich stellst Du hier auch oefters Fragen und moechtest darauf eine Antwort und keine Beschimpfung!!

Gruss, Niels

naja, jetzt wollen wir uns mal ned aufregen an so einem schönen Sonnen-Tag.

Bedenke einfach, dass bei grösseren Datenmengen INI-Files ineffizient werden und bei INIs über 64k zwar nicht crashen, aber den Teil hinter einem Offset von 65535 Byte einfach ignoriert werden, hab ich gehört.

Ich würde eher ein binäres Format oder Datenbank-Anbindung implementieren

Binaer kann ichs aber schlecht in einem Editor bearbeiten und mit DB muss ich dann noch die BDE mitliefern (und kanns auch nicht editieren) und wenn ich dem Kunden ein neues Geschwindigkeitsprofil liefern will oder er mir sein Profil zuschicken soll, dann wird es auch mit der Registry dumm!

Gruss, Niels

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Binaer kann ichs aber schlecht in einem
Editor bearbeiten

Umso besser. So *muss* man deine App benutzen.

und mit DB muss ich

dann noch die BDE mitliefern

nicht wenn du ADO verwendest.

(und kanns

auch nicht editieren)

müsste halt ein Desktop-programm installiert sein, z.b Access

und wenn ich dem
Kunden ein neues Geschwindigkeitsprofil
liefern will oder er mir sein Profil
zuschicken soll, dann wird es auch mit
der Registry dumm!

Das ist wahr. Die Registry wär hierfür so ziemlich ungeignet. Es sei denn, du findest es lustig ein Tool zu coden, das einen speziellen Schlüssen extrahioert, bzw. einhängt. Beim normalen Kopieren der Registry würden gleichnamige Keys und Values überschrieben werden.

Schonmal überlegt, dass ich nicht für meine Programme den Zugriff auf die INIs brauche ???

In diesem speziellen Fall sieht es so aus, dass ich für den FTP-Server Serv-U eine Userverwaltung programmiere. Die Userinfos sind nun halt mal in einer INI gespeichert…

Darum auch meine Frage; aber bitte entschuldige mich…ich werde keine Fragen mehr stellen !!!

Christian

Kannst auch mit Readsection ganze
Sektionnen in eine StringList einlesen!

Gruss, Niels

Hallo Niels…

Erst mal danke für Deine Antwort. Soweit habe ich das auch geschaft… :wink:

Aber mal angenommen ich möchte eine ganze Section auslesen…

Beim Befehl ReadSection(Section,Strings) muss ich ja einen Pointer auf die Strings angeben.

Ziel des ganzen wäre nun, dass ich die gesamte Section in einem Memo hätte.

Ich kenn mich eben mit dem Pointer-Zeugs nicht so aus. Kannst Du mir weiterhelfen ?

Viele Grüsse

Christian

Hallo,

vergiss erstmal die ganze Sache mit den Pointern! Davon merkst Du beim Programmieren nix:

procedure TForm1.Button1Click(Sender: TObject);
var
 Datei: TIniFile;

begin
 Datei := TIniFile.Create('C:\WINNT\Acroread.ini');
 with Datei do try
 readsectionvalues('AdobeViewer', Memo1.Lines);
 finally
 free;
 end;
end;

That’s it!

Memo1.Lines ist zwar im Prinzip ein Pointer auf ein TStrings-Objekt, aber das braucht Dich hier nicht zu interessieren. Delphi erledigt das fuer Dich.

Gruss, Niels

Hey merci viel mal für die schnelle Antwort und die Aufklärung wegen den Pointern :wink: !

Christian