【发布时间】:2012-12-21 08:28:45
【问题描述】:
我想要一个包含字符串列表的文本文件(例如,用逗号分隔的键和值可用于自动替换)并将每个键值对存储在TDictionary<string, string> 中。如何填充字典?
【问题讨论】:
标签: delphi tdictionary
我想要一个包含字符串列表的文本文件(例如,用逗号分隔的键和值可用于自动替换)并将每个键值对存储在TDictionary<string, string> 中。如何填充字典?
【问题讨论】:
标签: delphi tdictionary
从您的评论看来,您似乎想知道如何将一些以逗号分隔的键值对提取到字典中。这是一个基本示例:
procedure PopulateKeyValueDict(Strings: TStrings;
Dict: TDictionary<string, string>);
var
CommaPos: Integer;
Line: string;
Key, Value: string;
begin
for Line in Strings do
begin
CommaPos := Pos(',', Line);
if CommaPos=0 then
raise Exception.CreateFmt(
'Could find comma separated key/value pair in ''%s''',
[Line]
);
Key := Copy(Line, 1, CommaPos-1);
Value := Copy(Line, CommaPos+1, MaxInt);
Dict.Add(Key, Value);
end;
end;
您可能想要添加更多错误检查等,但我假设您已经知道如何做到这一点。此示例说明在第一个逗号上分割一行,以及如何填充字典。
为了使用它,您需要将文件传输到TStrings 对象。这是例行公事:
var
Strings: TStringList;
....
Strings := TStringList.Create;
try
Strings.LoadFromFile(FileName);
PopulateKeyValueDict(Strings, Dict);
finally
Strings.Free;
end;
【讨论】:
StringReplace 函数。
如果你只有一对一的键值关系(不像三个关键词“apple”和“apples”和“McIntoshes”会变成“McIntosh”)——那么最简单的方法可能是使用 TStringList,前提是
Key=Value 行,而不是Key,Value
那你用http://docwiki.embarcadero.com/Libraries/XE3/en/System.Classes.TStrings.Values
为了加快速度,您可以使用 IniFiles 单元的 THashedStringList。 JclXML 单元中的 JCL 也有类似的东西。
【讨论】:
awesome 但没有回答你的问题,你为什么接受它?恕我直言,大卫的回答非常适合您的问题,应该被接受。顺便说一句,使用 TStringList 您可以像 TDictionary 一样拥有许多具有相同值的键。只有键必须是唯一的