将所有部分 .ini 值读入 stringgrid

Read all section .ini values into stringgrid

我用的是Delphi XE7。有什么方法可以将 .ini 文件中的所有值加载到不同列的 stringgrid 中吗?

我的 .ini 文件看起来像

[1038]
AValue = a1 
BValue = b1
CValue = c1
DValue = d1

[1031]
AValue = a2 
BValue = b2
CValue = c2
DValue = d2

我用这个程序来填充网格:

procedure TForm1.ReadIntoGrid(const aIniFileName, aSection: string;
const aGrid: TStringGrid);
var
  Ini: TIniFile;
  SL: TStringList;
  i: Integer;
begin
  SL := TStringList.Create;
  try
    Ini := TIniFile.Create(aIniFileName);
    try
      aGrid.ColCount := 2;
      Ini.ReadSectionValues(aSection, SL);
      aGrid.RowCount := SL.Count;

      for i := 0 to SL.Count - 1 do
      begin
        aGrid.Cells[0,i] := SL.Names[i];
        aGrid.Cells[1,i] := SL.ValueFromIndex[i];
      end;
    finally
      Ini.Free;
    end;
  finally
    SL.Free;
  end;
end;

它工作正常,我明白了:

我的问题是...
如何将所有部分值(1038 和 1031)读取到 1038 值旁边的网格中?值将始终固定。

给你一些想法:

首先,我认为您应该在程序中添加一个参数:

procedure TForm1.ReadIntoGrid(const aIniFileName, aSection: string;
const aGrid: TStringGrid; const aColumn: Integer = 1);

其次,重写你方法的这一部分:

  for i := 0 to SL.Count - 1 do
  begin
    aGrid.Cells[0,i] := SL.Names[i];
    aGrid.Cells[1,i] := SL.ValueFromIndex[i];
  end;

替换为

  for i := 0 to SL.Count - 1 do
  begin
    aGrid.Cells[0,i] := SL.Names[i];
    aGrid.Cells[aColumn,i] := SL.ValueFromIndex[i];
  end;

ps:显然您不需要将值重写到第一列。

现在假设您正在调用这样的方法:

ReadIntoGrid('MyIniFile.ini','1038', MyGrid, 1);
ReadIntoGrid('MyIniFile.ini','1031', MyGrid, 2);