Zitat:
Ich würde das gerne. Aber sowohl die eingebaute Suchfunktion sowie mein favorisierter Suchanbieter finden nichts bei "TIniFormater".
[Ironie]Es war eine Anspielung auf "KodeZwergs TIniHelper Klasse"[/Ironie]
Abgesehen von der AES-Verschlüsselung (deine Worte) sehe ich auch keinen Sinn darin eine Klasse zu erstellen die im Grundfundament schon besteht.
Siehe TIniFile!
Warum das
Rad neu erfinden ohne wirklich fundamental Neues.
Und wenn schon dann sollte so etwas wie eine Funktion zum Formatieren einer IniDatei schon Enthalten sein.
Es macht schon sinn alleine der Lesbarkeit halber nicht alles Untereinander zu klatschen, zwischen den Section sollte schon eine Leerzeile stehen.
Meine einfache Funktion.. Nein keine Klasse warum auch geht auch anders.
Delphi-Quellcode:
type
PParseFile = ^TParseFile;
TParseFile =
record
Nr: Integer;
Str:
string;
Ptr: PParseFile;
Max: Integer;
end;
//....
var
LineStart: PParseFile;
FPBuffer: PParseFile;
FToPBuffer: PParseFile;
nReading: Integer;
//...
{$REGION 'procedure FormatINI'}
procedure FormatINI(Filename:
string);
var
sBuffer:
string;
ParseFile: TextFile;
StringList: TStringList;
StringParse:
string;
procedure AppendToLinkedList(nReading: Integer; sBuffer:
string);
begin
New(FPBuffer);
if nReading = 0
then
Begin
New(FToPBuffer);
LineStart := FToPBuffer;
LineStart^.Nr := 0;
end;
FPBuffer^.Nr := nReading;
FPBuffer^.Str := sBuffer;
LineStart^.Max := FPBuffer^.Nr;
FToPBuffer^.Ptr := FPBuffer;
FToPBuffer := FPBuffer;
end;
begin
StringList := TStringList.Create;
Assignfile(ParseFile, Filename);
reset(ParseFile);
try
try
while not eof(ParseFile)
do
begin
ReadLN(ParseFile, sBuffer);
AppendToLinkedList(nReading, sBuffer);
inc(nReading);
end;
except
raise Exception.Create(SysErrorMessage(GetLastError));
end;
finally
nReading := 0;
CloseFile(ParseFile);
end;
FPBuffer := LineStart;
while (FPBuffer.Nr <= LineStart.Max - 1)
do
begin
FPBuffer := FPBuffer.Ptr;
StringParse := LeftTrim(FPBuffer.Str);
if Length(StringParse) <> 0
then
StringList.Add(FPBuffer^.Str);
if FPBuffer.Nr > 0
then
if LeftStr(FPBuffer^.Str, 1) = '
['
then
StringList.Insert(StringList.IndexOf(StringParse), '
');
end;
StringList.SaveToFile(Filename);
StringList.Free;
Dispose(FPBuffer);
FPBuffer :=
nil;
LineStart :=
nil;
end;
{$ENDREGION}
Geht bestimmt schöner aber ist meine art.
Aufruf nachdem die INI erstellt wurde.
Delphi-Quellcode:
var
ConfigIni: TIniFile;
//...
FormatINI(ConfigIni.FileName);
gruss