Delphi从文本文件加载名称/值对

O.O*_*O.O -2 delphi tstringlist delphi-xe4

想要将名称值对加载到TStringList中.

有一个包含数据的文本文件:

a=ant
a=animal
b=bob
d=darn
Run Code Online (Sandbox Code Playgroud)

加载它的功能:

LoadData(argPath: string): TStringList;
var
  data: TStringList;
begin
  data := TStringList.Create(true);
  data.Delimiter := '=';
  try
    data.LoadFromFile(argPath);
  except on E : Exception do
  begin
    Application.MessageBox(PWideChar(E.Message), 
       'Unable to Load Data', MB_OK or MB_ICONERROR);
    Application.Terminate;
  end;
  end;
  Result := data;
end;
Run Code Online (Sandbox Code Playgroud)

结果目前是:

a=ant
a=animal
b=bob
d=darn
Run Code Online (Sandbox Code Playgroud)

希望结果的字符串是:

ant
animal
bob
darn
Run Code Online (Sandbox Code Playgroud)

和结果的TObjects

a
a
b
d
Run Code Online (Sandbox Code Playgroud)

在此之后,我希望能够在TComboBox中显示它.

Jer*_*dge 5

您必须使用TStringList中的内置函数.为了便于阅读/理解,我把它分解为变量,但可以压缩:

var
  X: Integer;
  Name, Value: String;
begin
  for X:= 0 to MyList.Count - 1 do begin
    Name:= MyList.Names[X];
    Value:= MyList.ValueFromIndex[X];
    MyCombo.Items.Add(Value);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

有了它,我相信你可以弄明白其余的(因为我不确定你的结果字符串和对象到底是什么意思).

  • 使用`Value:= MyList.ValueFromIndex [X];`而不是`Value:= MyList.Values [Name];`会更安全,更有效.然后你不必担心重复的名字,OO的例子清楚地表明确实存在.自Delphi 7以来,`ValueFromIndex []`属性已经存在. (3认同)