<$getstrvalue(T51,先天气运1)>
<$getstrvalue(T51,先天气运2)>
<$getstrvalue(T51,先天气运3)>
<$getstrvalue(T51,先天气运4)>
<$getstrvalue(T51,先天气运5)>
<$getstrvalue(T51,先天气运6)>
<$getstrvalue(T51,先天气运7)>
<$getstrvalue(T51,先天气运8)>
<$getstrvalue(T51,先天气运9)>
<$getstrvalue(T5
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-03-16 13:16:25 |
👁️ 阅读: 10
要实现这个判断,需要先获取所有键值对的值,然后检查其中包含“大道”的字符串数量是否超过5条且不重复。
根据课程日志记录,可以使用以下步骤:
1. **获取所有主键**:使用`GETSTRKEY`命令获取T51变量的所有主键。
2. **遍历所有主键**:使用`GETVALIDSTRSUPER`分割主键字符串,然后通过循环遍历每个主键。
3. **获取每个主键对应的值**:在循环中使用`GETSTRVALUE`获取每个主键对应的值。
4. **判断条件**:检查值是否包含“大道”字符串,并统计不重复的数量。
以下是实现代码:
```txt
[@判断先天气运]
#IF
#ACT
; 获取T51的所有主键
GETSTRKEY T51 S$所有主键
; 初始化变量
MOV N$包含大道数量 0
MOV S$已出现的大道值 ""
; 分割主键字符串
MOV N$索引 1
GETVALIDSTRSUPER <$STR(S$所有主键)> , S$分割主键 N$总主键数量
; 开始遍历
WHILE N$索引 < <$STR(N$总主键数量)>
; 获取当前主键
MOV S$当前主键 <$STR(S$分割主键<$STR(N$索引)>)>
; 获取对应的值
GETSTRVALUE T51 <$STR(S$当前主键)> S$当前值
; 检查是否包含"大道"
MOV S$查找结果 ""
GETVALIDSTR <$STR(S$当前值)> 大道 S$查找结果
#IF
NOT EQUAL S$查找结果 ""
#ACT
; 检查是否重复
MOV S$检查重复 ""
GETVALIDSTR <$STR(S$已出现的大道值)>,<$STR(S$当前值)>, S$检查重复
#IF
EQUAL S$检查重复 ""
#ACT
; 不重复,计入统计
INC N$包含大道数量 1
INC S$已出现的大道值 <$STR(S$当前值)>,
#ELSEACT
; 重复,不统计
#ENDIF
#ENDIF
INC N$索引 1
ENDWHILE
; 判断结果
#IF
LARGE N$包含大道数量 5
#ACT
SENDMSG 6 "包含'大道'的先天气运超过5条且不重复,数量:<$STR(N$包含大道数量)>"
#ELSEACT
SENDMSG 6 "包含'大道'的先天气运不超过5条或存在重复,数量:<$STR(N$包含大道数量)>"
#ENDIF
```
**代码说明:**
1. `GETSTRKEY T51 S$所有主键`:获取T51变量的所有主键,存入S$所有主键变量。
2. `GETVALIDSTRSUPER`:将逗号分隔的主键字符串分割成多个变量,便于遍历。
3. 循环中通过`GETSTRVALUE`获取每个主键对应的值。
4. 使用`GETVALIDSTR`检查值中是否包含"大道"字符串。
5. 使用`GETVALIDSTR`再次检查该值是否已在统计中出现过,避免重复统计。
6. 最后判断不重复的"大道"数量是否超过5条。
**注意事项:**
- 键值对操作不建议在面板上使用,可能导致耗时较高
- 确保T51变量已正确初始化并包含数据
- 字符串比较时注意大小写,中文搜索是精确匹配的
← 返回问答库