Einzelnen Beitrag anzeigen

bigg
(Gast)

n/a Beiträge
 
#6

Re: INIDatei: Namen der Sections auslesen

  Alt 13. Feb 2007, 15:48
Die etwas kompliziertere Variante wäre dann noch diese:

Delphi-Quellcode:
const MAX_INI_SIZE = 262144;

////////////////////////////////////////////////////////////////////////////////
// Größe einer Datei ermitteln
////////////////////////////////////////////////////////////////////////////////

function GetFileSize(const FileName: String): Int64;
var FileHandle: Cardinal; var Data: WIN32_FIND_DATA;
begin
  Result := -1;
  FileHandle := FindFirstFile(PChar(FileName), Data);
  try
    if FileHandle > 0 then
    begin
      Int64Rec(Result).Hi := Data.nFileSizeHigh;
      Int64Rec(Result).Lo := Data.nFileSizeLow;
    end;
  finally Windows.FindClose(FileHandle);
  end;
end;

////////////////////////////////////////////////////////////////////////////////
// Entfernt Tabs und Leerzeichen an Anfang und Ende eines
// jeden Eintrags in einer Liste
////////////////////////////////////////////////////////////////////////////////

procedure TrimIni(const Ini: TStringList);
var i: Integer;
begin
  for i := 0 to Ini.Count -1 do
  if Ini[i] <> 'then
  Ini[i] := Trim(Ini[i]);
end;

////////////////////////////////////////////////////////////////////////////////
// Versucht eine "Ini-Datei" einzulesen
////////////////////////////////////////////////////////////////////////////////

function OpenIni(const FileName: String; const Ini: TStringList): Boolean;
var FileSize: Int64;
begin
  Result := False;
  FileSize := GetFileSize(FileName);

  if FileSize <> -1 then
  begin
    if FileSize < MAX_INI_SIZE then
    begin

      try
        Result := True;
        Ini.LoadFromFile(FileName);
      except
        Result := False;
      end;

      if Result then TrimIni(Ini);
    end;
  end;
end;

////////////////////////////////////////////////////////////////////////////////
// Alle Gruppen auslesen
////////////////////////////////////////////////////////////////////////////////

procedure ReadSections(const Ini, Sections: TStringList);
var i, p: Integer;
begin
  Sections.Clear;

  for i := 0 to Ini.Count -1 do
  begin
    if Ini[i] <> 'then
    begin
      if Ini[i][1] = '[then
      begin
        p := PosShaAsm5(']', Ini[i]); // ersetzen durch POS()

        if p > 2 then
        Sections.Add(Copy(Ini[i], 1, p));
      end;
    end;
  end;
end;
Benötigt werden 2 Listen vom Typ TStringList.
  Mit Zitat antworten Zitat