delphi-5 - Delphi 5 TStringList NameValueSeparator
问题描述
我有一个带有像这样的键值对的文本文件
user1|password1
user2|password2
user3|password3
在delphi 10中,我使用这个函数来获取键值
function getKeyByName(fileName, key: string) : string;
var
dataFile : TStringList;
begin
Result := 'Not Found';
dataFile := TStringList.Create;
dataFile.LoadFromFile(fileName);
dataFile.NameValueSeparator := '|';
if dataFile.Values[key] <> '' then
Result := dataFile.Values[key];
dataFile.Free;
end;
现在一切都很好。
我尝试将此功能与 delphi 5 一起使用,但属性 (NameValueSeparator) 不存在。
如果我将分隔符更改为 (=) 并将函数更改为:
function getKeyByName(fileName, key: string) : string;
var
dataFile : TStringList;
begin
Result := 'Not Found';
dataFile := TStringList.Create;
dataFile.LoadFromFile(fileName);
if dataFile.Values[key] <> '' then
Result := dataFile.Values[key];
dataFile.Free;
end;
我可以得到结果,但我的文本文件中的分隔符是 (|)。
我应该怎么做才能为列表设置分隔符(|)?
感谢帮助。
解决方案
Delphi 5 没有该NameValueSeparator
属性,因此您必须手动解析各个字符串,例如:
function getKeyByName(fileName, key: string) : string;
var
dataFile : TStringList;
i, j: Integer;
s: string;
begin
Result := 'Not Found';
dataFile := TStringList.Create;
try
dataFile.LoadFromFile(fileName);
for i := 0 to dataFile.Count-1 do
begin
s := dataFile[i];
j := Pos('|', s);
if j = 0 then Continue;
if Copy(s, 1, j-1) <> key then Continue;
s := Copy(s, j+1, MaxInt);
if s <> '' then Result := s;
Break;
end;
finally
dataFile.Free;
end;
end;
推荐阅读
- cluster-analysis - 聚类完成后如何在不重新聚类整个数据集的情况下更新数据集?
- php - PHP邮件表单未从主机发送
- typescript - Contacts.find(fields,options) 仅针对离子中 for 循环内的最后一个元素执行?
- select - Vue 多选
- google-maps-urls - 谷歌地图网址的使用限制
- python - 无法在模板中显示模型中的数据
- robotframework - 是否可以在 RobotFramework 中设置关键字参数的范围而不显式使用内置关键字 - “设置
多变的” - android - 如何将带有预训练嵌入的 Tensorflow RNN (LSTM/GRU) 集成到移动设备 (android/iphone) 中?
- html - 菜单项之间的空白框
- excel - 在 Excel 数据透视表中计算与上一个日期的差异