【发布时间】:2015-07-17 21:58:00
【问题描述】:
想要将名称值对加载到 TStringList 中。
有一个包含数据的文本文件:
a=ant
a=animal
b=bob
d=darn
加载函数:
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;
目前的结果是:
a=ant
a=animal
b=bob
d=darn
希望结果的字符串是:
ant
animal
bob
darn
Result 的 TObjects 是
a
a
b
d
之后我希望能够在 TComboBox 中显示它。
【问题讨论】:
-
名字总是单字符吗?因为如果是这样,您可以简单地将其序数值存储为对象(在手动解析之后)。 [没有考虑到这种特殊要求的怪异...] P.S.
Delimiter属性与名称值对无关(您可能一直在寻找NameValueSeparator)。 -
...默认已经是
=了。 -
使用 LoadFromFile,Result 的字符串将是 name=value 对,Result.Object[x] 将全部为零。字符串值 a、a、b、d 不是对象,它们是字符串,你不说它们应该是什么类型的对象。因此,目前尚不清楚您要在这里完成什么。此外,当您说“我希望能够在 TComboBox 中显示这个”时,不清楚“这个”指的是什么;名称部分、值部分或完整的名称=值字符串?
-
顺便说一句,您抛出的异常很奇怪。出现异常的唯一原因是文件不存在或内存不足。一个更好的方法是测试
FileExists(argPath)并抛出一个错误或异常,说明为什么如果不是。不要等待 LoadFromFile 失败然后抛出无意义的错误消息。虽然这可能只是为了简单的测试,但您通常不希望在方法中的异常中终止应用程序。让外部范围内的异常处理程序处理它(如果存在)。如果没有,那么应用程序将自行终止。 -
你已经陈述了你拥有什么以及你想要实现什么,但你还没有提出问题。你有什么困难?您已经了解分隔符、字符串和对象;是什么阻止你采取下一步行动并做你想做的事? (顺便说一句,将字符串存储在
Objects属性中确实不是一个好主意。如果您想要名称和值的列表,请考虑使用TDictionary。)
标签: delphi delphi-xe4 tstringlist