如何将INI部分分配给delphi 7中的记录

时间:2011-06-22 17:20:06

标签: delphi delphi-7

对不起,我不清楚......让我们再试一次

我有一个记录类型:

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中分配/更新具有键值对的记录字段。

查尔斯

2 个答案:

答案 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'])

当然,你会想要以这种或那种方式处理错误,但这是基本的想法。