对不起,我不清楚......让我们再试一次
我有一个记录类型:
MyRecord = Record
Name: string;
Age: integer;
Height: integer;
several more fields....
和一个INI文件:
[PEOPLE]
Name=Maxine
Age=30
maybe one or two other key/value pairs
我想要做的就是使用INI文件中的数据加载记录。
我在TStringList中有来自INI的数据我希望能够遍历TStringList并仅在TStringList中分配/更新具有键值对的记录字段。
查尔斯
答案 0 :(得分:5)
所以你有一个内容为
的INI文件[PEOPLE]
Name=Maxine
Age=30
并希望将其加载到由
定义的记录中type
TMyRecord = record
Name: string;
Age: integer;
end;
?这很容易。只需将IniFiles
添加到设备的uses
子句中,然后执行
var
MyRecord: TMyRecord;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TIniFile.Create(FileName) do
try
MyRecord.Name := ReadString('PEOPLE', 'Name', '');
MyRecord.Age := ReadInteger('PEOPLE', 'Age', 0);
finally
Free;
end;
end;
当然,MyRecord
变量不一定是全局变量。它也可以是局部变量或类中的字段。但这一切都取决于你的确切情况,自然。
简单推广
稍微有趣的情况是,如果您的INI文件包含多个人,例如
[PERSON1]
Name=Andreas
Age=23
[PERSON2]
Name=David
Age=40
[PERSON3]
Name=Marjan
Age=49
...
并且您想将其加载到TMyRecord
个记录数组中,然后就可以
var
Records: array of TMyRecord;
procedure TForm4.FormCreate(Sender: TObject);
var
Sections: TStringList;
i: TIniFile;
begin
with TIniFile.Create(FileName) do
try
Sections := TStringList.Create;
try
ReadSections(Sections);
SetLength(Records, Sections.Count);
for i := 0 to Sections.Count - 1 do
begin
Records[i].Name := ReadString(Sections[i], 'Name', '');
Records[i].Age := ReadInteger(Sections[i], 'Age', 0);
end;
finally
Sections.Free;
end;
finally
Free;
end;
end;
答案 1 :(得分:2)
如果您在字符串列表中有INI部分,则可以使用Values[]
属性:
字符串列表内容
Name=Maxine
Age=30
读入记录的代码
MyRecord.Name := StringList.Values['Name']
MyRecord.Age = StrToInt(StringList.Values['Age'])
当然,你会想要以这种或那种方式处理错误,但这是基本的想法。