我有一个INI文件,其中存储了一些用于设置的整数。段名称的存储方式如下:

[ColorScheme_2]
name=Dark Purple Gradient
BackgroundColor=224
BackgroundBottom=2
BackgroundTop=25
...

[ColorScheme_3]
name=Retro
BackgroundColor=5
BackgroundBottom=21
BackgroundTop=8
...


我需要找出一种创建新部分的方法,该方法可以从最高部分编号中增加配色方案编号+1。我有一个comboBox,列出了当前的colorcheme名称,因此当用户保存到INI文件时,现有方案将被覆盖。如何检查ComboBox文本以查看其是否为现有节,如果不存在,则创建一个名称递增的新节? (即,根据上面的示例代码,ColorScheme_2ColorScheme_3已经存在,因此下一个要创建的部分将是ColorScheme_4)。

最佳答案

您可以使用ReadSections方法读取所有部分,然后迭代返回的字符串列表并解析其中的每个项目以存储找到的最高索引值:

uses
  IniFiles;

function GetMaxSectionIndex(const AFileName: string): Integer;
var
  S: string;
  I: Integer;
  Index: Integer;
  IniFile: TIniFile;
  Sections: TStringList;
const
  ColorScheme = 'ColorScheme_';
begin
  Result := 0;
  IniFile := TIniFile.Create(AFileName);
  try
    Sections := TStringList.Create;
    try
      IniFile.ReadSections(Sections);
      for I := 0 to Sections.Count - 1 do
      begin
        S := Sections[I];
        if Pos(ColorScheme, S) = 1 then
        begin
          Delete(S, 1, Length(ColorScheme));
          if TryStrToInt(S, Index) then
            if Index > Result then
              Result := Index;
        end;
      end;
    finally
      Sections.Free;
    end;
  finally
    IniFile.Free;
  end;
end;


以及用法:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(GetMaxSectionIndex('d:\Config.ini')));
end;

关于delphi - 递增INI文件段号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15188921/

10-13 05:04