我想要一个带有字符串列表的文本文件(例如,逗号与可用于自动替换的键和值分隔)并将每个键值对存储在TDictionary<string, string>
. 如何填充字典?
问问题
1538 次
2 回答
4
从您的评论看来,您似乎想知道如何将一些以逗号分隔的键值对提取到字典中。这是一个基本示例:
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;
于 2012-12-21T09:00:52.287 回答
1
如果你只有一对一的键值关系(不像三个关键词“apple”和“apples”,“McIntoshes”会变成“McIntosh”)——那么最简单的方法可能是使用 TStringList,提供了
- 你让你的文件完全由
Key=Value
行组成,而不是Key,Value
- 你要么需要它区分大小写,要么对文件执行大写。
然后你使用http://docwiki.embarcadero.com/Libraries/XE3/en/System.Classes.TStrings.Values
为了加快速度,您可以使用 IniFiles 单元的 THashedStringList。在 JclXML 单元中的 JCL 中也有类似的东西。
于 2012-12-21T10:55:45.743 回答