代码之家  ›  专栏  ›  技术社区  ›  Rober.Ya

Delphi 5 t字符串列表名称值分隔符

  •  -1
  • Rober.Ya  · 技术社区  · 6 年前

    我有一个文本文件,有这样的键值对

    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;
    

    现在一切都很顺利。

    我尝试在Delphi5中使用这个函数,但是属性(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;
    

    我可以得到结果,但文本文件中的分隔符是()。

    我应该如何设置列表的分隔符字符()?

    谢谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Remy Lebeau    6 年前

    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;