我想知道如何编写Inifile以便我可以按顺序阅读它。
首先写一下:假设我要保存2个字符串(姓名和姓氏)。
这是一个按钮。所以每次都会点击它:
Ini.WriteString(person1, 'Name', Name.text);
Ini.WriteString(person1, 'Lastname', Lastname.text);
如何在每次添加新人时更改此人1。所以下次person2,person3等。怎么可能?我必须看看前面所说的内容吗?还是会记得吗?也许如果我理解这一点,那么从文件中读取内容将会同样适用。
亲切的问候,谢谢
答案 0 :(得分:5)
我想您想将 n 数据项存储在INI文件中。我一直这样做 - 这很容易。首先,保存是微不足道的,但当然,确切的过程取决于从何处获取数据。例如,如果您有两个字符串数组(让我们称之为FirstNames
和LastNames
),那么您只需执行
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并将其保存并加载到磁盘。