Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 5 Delphi 5 TStringList名称值分隔符_Delphi 5_Tstringlist - Fatal编程技术网

Delphi 5 Delphi 5 TStringList名称值分隔符

Delphi 5 Delphi 5 TStringList名称值分隔符,delphi-5,tstringlist,Delphi 5,Tstringlist,我有一个包含键值对的文本文件,如下所示 user1|password1 user2|password2 user3|password3 在Delphi10中,我使用此函数获取键值 function getKeyByName(fileName, key: string) : string; var dataFile : TStringList; begin Result := 'Not Found'; dataFile := TStringList.Create; dataFil

我有一个包含键值对的文本文件,如下所示

user1|password1
user2|password2
user3|password3
在Delphi10中,我使用此函数获取键值

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;
我可以得到结果,但文本文件中的分隔符是|

如何设置列表的分隔符char |


谢谢您的帮助。

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;

最好使用合适的词典。请给我举个例子。你需要使用第三方词典代码。对于我们来说,绕过这样一个古老的德尔菲的所有限制是不太有趣的。如果您不想找到第三方库,您是否考虑过自己编写一些代码来执行此操作?我想我将从delphi 10创建一个DLL文件,并将其加载到delphi5中。如果要这样做,您可以扔掉字符串列表并使用字典。