Thema: FormatINI

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

FormatINI

  Alt 18. Mai 2015, 03:06
Kleine procedure um INI Dateien zu formatieren.

Delphi-Quellcode:
function LeftStr(const Str: string; Size: Word): string;
begin
  Result := Copy(Str, 1, Size)

end;
Delphi-Quellcode:
type
  PParseFile = ^TParseFile;
  TParseFile = record
    Nr: Integer;
    Str: string;
    Ptr: PParseFile;
    Max: Integer;
  end;
Delphi-Quellcode:
var
  LineStart: PParseFile;
  FPBuffer: PParseFile;
  FToPBuffer: PParseFile;
  nReading: Integer;
Delphi-Quellcode:
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;
Mich ärgert immer wenn die Dateien zu unaufgeräumt sind.
Die Ini wird so formatiert das vor jedem neuen Eintrag "[..]" eine Leerzeile eingefügt wird.

Wer's braucht.. bitte schön.

gruss
  Mit Zitat antworten Zitat