AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Objektorientiertes TIniFile-Replacement mit Unicode-Fähigkeit
Thema durchsuchen
Ansicht
Themen-Optionen

Objektorientiertes TIniFile-Replacement mit Unicode-Fähigkeit

Ein Thema von Codehunter · begonnen am 19. Okt 2012 · letzter Beitrag vom 15. Jan 2013
 
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Objektorientiertes TIniFile-Replacement mit Unicode-Fähigkeit

  Alt 19. Okt 2012, 15:13
Hallöche...

Ich verwende als Konfiguration in meinen Projekten am liebsten Ini-Dateien statt der Registry. Dabei hat mich eigentlich immer gestört, dass TIniFile
  1. keinen direkten Zuriff auf Einträge in der Ini bietet sondern mehr oder weniger nur eine in eine Klasse verpackte prozedurale Programmierung hat
  2. Nicht wirklich eine Streaming-Fähigkeit hat, man kann nicht direkt aus Streams lesen oder in Streams speichern.
  3. (zumindest in D7) nicht Unicode-fähig ist
  4. Keine umkonfigurierbaren Kommentar-Einleit-Zeichen hat
  5. Keine Zeilenumbrüche innerhalb von Variablenwerten unterstützt
  6. Keine Funktion zum regelmäßigen automatischen Speichern hat
Darum hab ich mal ein bissi was gebastelt. Herausgekommen ist eine Klasse, die einen Großteil der Properties und Methoden von TIniFile bietet (also zu 99% kompatibel sein sollte), per Compilerschalter zwischen einer Unicode- und einer ANSI-Version umschaltbar ist und auf die einzelnen Sections und Idents direkt zugreifen kann. Ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Ini: TUniObjectIni;
begin
  Ini:= TUniObjectIni.Create('C:\Test.txt');
  try
    Ini['Section1']['Ident1'].Str:= 'Test 1';
    Ini['Section2']['Ident1'].Str:= 'Zeile 1' + #13#10 + 'Zeile 2';
    Ini['Section2']['Number'].Int:= 1234;
    Ini['Section2']['Float'].Float:= 12.34;
    Ini['Section2']['Timestamp'].DateTime:= Now;
  finally
    Ini.UpdateFile;
    Ini.Free;
  end;
end;
Am Rande bemerkt verwendet TUniObjectIni nicht das Windows-API für die Dateigeschichten (Stichwort WritePrivateProfileString) sondern arbeitet komplett mit einer StringList. Dadurch sollte der Code auch relativ leicht zu Lazarus portierbar sein. Es wird aber nur beim Laden und Speichern von Dateien auf der StringList rumfuhrwerkt, alles andere passiert komplett im Speicher.

Als Unicode-Backend verwende ich in dem Fall SynUnicode (siehe SynEdit-Komponenten bei Sourceforge), man könnte aber genausogut jede andere Implementierung einer Unicode-fähigen StringList verbauen. Die jetzige ist jedenfalls schlau genug, um sowohl ANSI- als auch Unicode-codierte Dateien zu laden. Einmal als ANSI geladene Dateien bleiben auch beim Speichern ANSI, es sei denn man fügt Unicode ein.

Schauts euch mal an und gebt mal ein bisschen Feedback dazu.

Greets
Cody
Angehängte Dateien
Dateityp: pas UniObjectIni.pas (25,3 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
 


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 01:30 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