我调SD插件SDPosInList检测文本字符返回参数踩坑记录
摘要:SD插件检测文本字符并返回参数用SDPosInList命令实现,本文讲解格式、五个参数含义、实操演示、同类命令对比与疑问解答。命令按检测字符定位文本行,把整行数据存入字符变量、行号存入数字变量,支持可选反向检测,适合竖线分隔的战斗力榜、充值记录、花名册类结构化文本查询场景。…
以前做战斗力查询,玩家点NPC问自己战力,我得自己写脚本去战斗力.txt里一行行翻,翻到名字那行再拆竖线,写了一堆判断还经常错位。后来换SDPosInList一条命令,直接把命中那一整行数据和行号都吐到变量里,省掉手动拆行这步。不过第一次调的时候我把返回变量顺序搞反,结果S变量里拿到行号、N变量里拿到整行,排了半天才发现。这篇把检测文本字符并返回参数这条命令讲清楚,照着参数顺序填就不会再踩。
检测文本字符并返回参数做的事是:给一个检测字符,去指定文本里找它,找到后把那一整行的数据存进你指定的变量,顺便把行号也存进另一个变量。跟只返回行号的命令比,它直接把整行数据带回来,做竖线分隔的结构化文本查询时特别顺手。

格式讲解
SDPosInList格式带五个参数,前三个必填,后两个可忽略:
SDPosInList 检测字符 文本路径 保存变量 返回行数变量 反向检测
官方用战斗力.txt做例子,文本内容每行一条玩家记录:
玩家名字一|赵鼠|战斗力|650
玩家名字二|钱牛|战斗力|126
玩家名字三|孙虎|战斗力|425
玩家名字四|李兔|战斗力|647
玩家名字五|周龙|战斗力|823
玩家名字六|吴蛇|战斗力|740
完整条件段写法如下:
[@测试]
#IF
SDPosInList 李兔 ..\QuestDiary\战斗力.txt S10 N10
#ACT
SENDMSG 5 S10返回数据为:玩家名字四|李兔|战斗力|647
SENDMSG 5 N10返回数据为:3
break
#ELSEACT
SENDMSG 5 未找到该字符
break
命中后S10拿到整行数据”玩家名字四|李兔|战斗力|647”,N10拿到行号3;没找到就走#ELSEACT提示未找到该字符。
参数与含义
| 参数 | 说明 |
|---|---|
| 参数1检测字符 | 要在文本里查找的内容 |
| 参数2文本路径 | 文本文件路径,官方示例用..\QuestDiary\战斗力.txt |
| 参数3保存变量 | 检测到字符后,把命中的那一整行数据存入这个变量 |
| 参数4返回行数变量 | 检测到字符后返回在文本中的行数,该参数可忽略 |
| 参数5反向检测 | 填1则为反向检测,该参数可忽略 |
最容易错的就是参数3和参数4:参数3接的是整行数据(字符型变量),参数4接的是行号(数字型变量),我第一次就是把S10和N10填反。做文本字符检测和字符行数返回时,先分清哪个变量拿数据、哪个变量拿行号,后面拆竖线字段才不会错。
实操演示
按战斗力查询这个场景走一遍:
第一步,在QuestDiary目录下准备好战斗力.txt,每行用竖线分隔字段,比如名字、职业标签、战斗力数值,确认编码和引擎一致。
第二步,在#IF条件段写入SDPosInList,检测字符填要查的玩家名,文本路径填战斗力.txt,第三个参数指定一个S变量接整行数据,第四个参数指定一个N变量接行号。
第三步,在#ACT段用SENDMSG把S变量和N变量显示出来,确认拿到的整行数据和行号跟文件里对得上,再按竖线把战斗力数值拆出来给玩家看。
同类命令对比
同样是查文本,SDPosInList和只定位行号的命令区别在于它把整行数据也带回来了:只返回行号的命令你拿到第几行之后还得自己再去读那一行内容,SDPosInList一步到位把数据和行号都给你。做竖线分隔的结构化文本查询,比如战斗力榜、充值记录、家族花名册,优先用这条直接返回行数据;只关心”在第几行”、不需要整行内容的,才用轻量的行号定位命令。参数调用时注意它的返回变量是先数据后行号,别和别的命令顺序记混。
疑问解答
1. 问:用读取类命令从文本里取出来的数据是空的怎么办?
答:读空先查检测字符跟文本里实际内容是否完全一致,名字打错、多了空格或换行都会匹配不到;再确认文本路径写对、文件确实存在;最后检查接收变量没被别的脚本覆盖。SDPosInList读的是文件内容,跟目标玩家在不在线没关系。(来源:天天脚本库,2024-08检索,已去隐私)
2. 问:人物在线改名脚本一般怎么写?
答:用@@InputString弹窗让玩家输入新名称,再用长度检测命令判断名称是否合法、用相等判断检测名称是否已被占用,通过后更新人物名字数据并清理旧名称记录。做文本里按名字查记录的脚本时,改名后记得同步刷新战斗力.txt这类按行存的数据文件,否则还按旧名字查会查空。(来源:CSDN,2021-01检索,已去隐私)
3. 问:不同引擎之间脚本转换后,文本排版为什么反了?
答:不同引擎在字符串补空格、文本对齐方向上处理可能相反,转换过来后排版会反过来,需要手动调整对齐方向。SDPosInList这类按字符定位的命令跨引擎使用前要先自查返回变量顺序和行号口径,别直接照搬。(来源:CSDN,2022-11检索,已去隐私)
4. 问:参数4和参数5真的可以不写吗?
答:可以。参数4返回行数、参数5反向检测都是可忽略的,只需要整行数据、不关心行号时,前三个参数写全就能用。要倒着从文件末尾找,才把参数5填1做反向检测;需要行号做后续跳转时,再补上参数4。
5. 问:文本里有多条相同记录,命令返回哪一条?
答:默认从上往下找,返回第一次命中的那一行数据和它的行号。如果同一字符可能重复出现、而你想取最后那条,就把参数5填1改成反向检测,从文件末尾往前找。做唯一键查询时这个问题不存在,重名场景才要注意方向。
6. 问:返回的整行数据怎么拆成单个字段?
答:官方示例的行数据是”玩家名字四|李兔|战斗力|647”这种竖线分隔格式,拿到S变量后,再配合字符串拆分命令按竖线把每一段切出来,分别取名字和战斗力数值。写文本时统一用竖线做分隔、一行一条记录,查询后拆字段才顺。
总结
检测文本字符并返回参数用SDPosInList一步把命中行的整行数据和行号存进两个变量,参数3接数据、参数4接行号,参数5可选反向检测。做竖线分隔的结构化文本查询时,它比只返回行号的命令少一步读行,记住变量顺序别填反就行。更多SD插件脚本命令可以继续关注本站。
SDPosInList的返回行数据与行数示例在本地逐条跑过,结果与文档一致,仅适配SD插件,跨引擎使用前请先自查。
内容来源可溯:SD插件帮助文档(检测文本字符并返回参数)。
扫描二维码推送至手机访问。
本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。
本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。








