You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 如何从带多分隔符的字符串中提取指定属性对应的值

原始属性字符串示例:;EncoderMin:250;EncoderMax:5755;MinPixel:-240;MaxPixel:980;

问题原因

你当前代码不生效的核心是:TStringList的Values属性默认使用=作为键值对分隔符,而你的数据中键和值用:分隔,所以无法直接匹配到对应属性值。

修正后的代码实现

function TFrameLayout3DSTD.GetAttributiSTD(ALoc: Integer;AField: String; AVarType: Word): Variant;
var
  Q: TADOQuery;
  LLista : TStringList;
begin
  Result := null;
  Q := DMConn.GetQuery(
    'select AttributiSTD from Locazioni3D where idLocazione = %d', [ALoc]);
  try
    Q.Open;
    if Q.IsEmpty then Exit; // 空数据提前退出避免异常
    LLista := TStringList.Create;
    try
      LLista.Delimiter := ';';
      LLista.StrictDelimiter := True;
      LLista.NameValueSeparator := ':'; // 新增:指定键值分隔符为冒号
      LLista.DelimitedText := Q.Fields[0].AsString;
      
      // 存在对应属性则返回数值,不存在返回Null
      if LLista.IndexOfName(AField) > -1 then
        Result := StrToFloatDef(LLista.Values[AField], Null);
    finally
      LLista.Free;
    end;
  finally
    Q.Free;
  end;
end;

调整说明

  • 新增NameValueSeparator属性配置,适配你数据中冒号分隔键值的格式,Values属性就可以正常匹配属性名
  • 增加空查询结果判断,避免无数据时的无效操作
  • 增加了数值转换逻辑,返回的是数值类型而非字符串,如果你需要返回原始字符串直接赋值Result := LLista.Values[AField]即可
  • 字符串首尾的多余分号会被解析为空键值对,不影响正常属性的查询匹配

内容的提问来源于stack exchange,提问作者MattiTheMaestro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:39:05