本帖最后由 tang_ge 于 2022-7-25 10:45 编辑
虽然使用正则可以快速提取出文本中的 DR 码
正则文本:
- \[DR:(image|card|at|emoji|music|video|file|record),(.*)\]
复制代码
效果:
对于单个 DR 码很好用,但是多个就出现问题(匹配到的结果不是我们想要的),所以要换思路,想到之前群友分享的用 精益模块 中的 文本_* 操作提取 DR 码,研究了下终于搞出可以稳定运行的代码
在提取出 DR 码之后利用每个参数间用“,”分割的特点,使用文本分割转为数组进行下一步处理
这里写了一个 Class_Code 类来对 DR 码转换为 Json 文本
- .版本 2
- .程序集 Class_Code
- .程序集变量 Json, 类_json
- .子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用
- .子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用
- .子程序 GetParam, 文本型, 公开
- .参数 Key, 文本型
- 返回 (Json.取通用属性 (“Data.” + Key, ))
- .子程序 SetParam, , 公开
- .参数 Key, 文本型
- .参数 Value, 文本型
- .局部变量 _Json, 类_json
- _Json.置属性 (Key, Value, )
- Json.置属性 (“Data”, _Json.取数据文本 (), 真)
- .子程序 SetParams, , 公开
- .参数 Params, 文本型, 数组
- .局部变量 i, 整数型
- .局部变量 p, 文本型
- .计次循环首 (取数组成员数 (Params), i)
- p = Params [i]
- SetParam (文本_取左边 (p, “=”, , ), 文本_取右边 (p, “=”, -1, ))
- .计次循环尾 ()
- .子程序 GetType, 文本型, 公开
- 返回 (Json.取通用属性 (“Type”, ))
- .子程序 SetType, , 公开
- .参数 Type, 文本型
- Json.置属性 (“Type”, Type, )
- .子程序 GetCodeData, 文本型, 公开
- 返回 (Json.取数据文本 ())
复制代码
当然还用到了取出数组中指定范围内的一个函数:
- .版本 2
- .子程序 数组_取指定范围, 逻辑型
- .参数 Start, 整数型
- .参数 End, 整数型
- .参数 Ref_List, 文本型, 参考 数组
- .局部变量 i, 整数型
- .局部变量 step, 整数型
- .局部变量 res, 文本型, , "0"
- .如果真 (Start > End 或 End > 取数组成员数 (Ref_List) 或 Start < 1)
- 返回 (假)
- .如果真结束
- step = End - Start + 1
- .计次循环首 (step, i)
- 加入成员 (res, Ref_List [Start + i - 1])
- .计次循环尾 ()
- Ref_List = res
- 返回 (真)
复制代码
最终结果:
源码:
*需要精益模块
|