写作和阅读inifiles订购

时间:2011-03-11 17:51:47

标签: delphi ini

我想知道如何编写Inifile以便我可以按顺序阅读它。

首先写一下:假设我要保存2个字符串(姓名和姓氏)。

这是一个按钮。所以每次都会点击它:

Ini.WriteString(person1, 'Name', Name.text);
Ini.WriteString(person1, 'Lastname', Lastname.text);

如何在每次添加新人时更改此人1。所以下次person2,person3等。怎么可能?我必须看看前面所说的内容吗?还是会记得吗?也许如果我理解这一点,那么从文件中读取内容将会同样适用。

亲切的问候,谢谢

3 个答案:

答案 0 :(得分:5)

我想您想将 n 数据项存储在INI文件中。我一直这样做 - 这很容易。首先,保存是微不足道的,但当然,确切的过程取决于从何处获取数据。例如,如果您有两个字符串数组(让我们称之为FirstNamesLastNames),那么您只需执行

for i := 0 to high(FirstNames) do
begin
  IniFile.WriteString('Names', 'FirstName' + IntToStr(i), FirstNames[i]);
  IniFile.WriteString('Names', 'LastName' + IntToStr(i), LastNames[i]);
end;

要阅读(未知数量的项目),请执行类似

的操作
for i := 0 to MaxInt do
  if ValueExists('Names', 'FirstName' + IntToStr(i)) then
    // Do something with ReadString('Names', 'FirstName' + IntToStr(i))
    // and ReadString('Names', 'LastName' + IntToStr(i))
  else
    break;

请注意,'Names'是INI文件中用于存储数据的部分的任意名称。

更新

如果您只想在点击按钮时保存项目,为什么不这样做

private
  { Private declarations }
  n: integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
  n := 0;
end;

然后

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TIniFile.Create('myfile.ini') do
    try
      WriteString('Names', 'FirstName' + IntToStr(n), Edit1.Text);
      WriteString('Names', 'LastName' + IntToStr(n), Edit2.Text);
      inc(n);
    finally
      Free;
    end;
end;

如果您希望每个项目都有一个部分,请执行

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TIniFile.Create('myfile.ini') do
    try
      WriteString('Name' + IntToStr(n), 'FirstName', Edit1.Text);
      WriteString('Name' + IntToStr(n), 'LastName', Edit2.Text);
      inc(n);
    finally
      Free;
    end;
end;

代替。

答案 1 :(得分:3)

要在每次保存人员时获得部分的顺序编号,您必须阅读所有部分名称,确定最高编号,增加该编号,然后使用它来编写具有该名称的新部分和新人员的值

类似的东西:

var
  IniFile: TIniFile;
  SL: TStringList;
  i: Integer;
  Highest: Integer;
begin
  IniFile := TIniFile.Create('MyIni.ini');
  try
    SL := TStringList.Create;
    try
      IniFile.ReadSections(SL);
      Highest := 0;
      for i := 0 to SL.Count - 1 do begin
        Highest := Max(Highest, StrToIntDef(Copy(SL[i], Length('Person'), MAXINT), 0));
      end;

      IniFile.WriteString('Person' + IntToStr(Highest), 'Name', Name.Text);
      IniFile.WriteString('Person' + IntToStr(Highest), 'LastName', LastName.Text);

    finally
      SL.Free;
    end;

  finally
    IniFile.Free;
  end;

end;

答案 2 :(得分:0)

我怀疑使用ini文件来执行此操作是错误的方法。 Ini文件不是为了按顺序存储内容而设计的。实现这一目标的最简单方法是使用TStringList并将其保存并加载到磁盘。

相关问题