SD插件SDGetStringPosEX检测字符串在列表中行数指南
摘要:SD插件检测字符串在列表中的行数用SDGetStringPosEX命令实现,本文逐参数讲解七个参数含义、配置步骤、高频误操作与热点问答。命令把命中行的行数写入数字变量、整行内容写入字符变量,配合匹配模式与查找方向可应对模糊查找、精确匹配和重复记录,适合排行榜反查、玩家名单核对类脚本场景。…
之前做一个土城NPC战力榜玩法,要从玩家数据文本里按名字捞出他所在的那一整行,自己写变量逐行比对,玩家一多就卡。后来翻SD插件帮助文档才找到现成的检测字符串在列表中的行数命令SDGetStringPosEX,一行七个参数直接把行数和行内容都吐出来,省事很多。这篇把这3个最容易填错的参数讲清楚,写文本定位脚本时照着对就行。
检测字符串在列表中的行数解决的是”给定一个字符,去指定文本里找它在第几行、那一行写了什么”这件事,不用自己循环读文件,返回值直接落到数字变量和字符变量里。跟逐行比对相比,它把读取、定位、取值三步合成一个命令,写排行榜、查玩家记录这类玩法时特别顺手。

命令格式
SDGetStringPosEX的完整格式一行写全七个参数,文件路径后面跟着检测字符和两个接收变量:
SDGetStringPosEX ..\QuestDiary\测试.txt GM一号 N1 S1 0
条件段配提示语的完整写法如下:
[@MAIN]
#IF
SDGetStringPosEX ..\QuestDiary\测试.txt GM一号 N1 S1 0
#ACT
SendMsg 5 字符在文本中的行数:<$STR(N1)>,本行所有内容是:<$STR(S1)>。
#ELSEACT
SendMsg 5 字符不在测试.txt文本中。
检测到字符时条件成立,引擎把命中行的行号写进第三个参数指定的数字变量,把整行内容写进第四个参数指定的字符变量;没找到就走#ELSEACT分支。这段可以挂在NPC对话段、机器人定时检测里,用SendMsg把结果显示出来。
参数速查
| 参数 | 说明 |
|---|---|
| 参数1文件路径 | 要检索的文本文件路径,配合参数5决定按相对还是绝对路径读取 |
| 参数2检测字符 | 要查找的内容,支持变量、大小写字母、数字 |
| 参数3返回行数 | 数字型变量,如N1,返回检测字符所在行数,可换成其它数字型变量 |
| 参数4返回行内容 | 字符型变量,如S1,返回命中行的整行内容,可换成其它字符型变量 |
| 参数5路径模式 | 0为相对路径,1为绝对路径,两种模式任选 |
| 参数6匹配模式 | 0或空为包含匹配,1为完全匹配 |
| 参数7查找方向 | 0从上往下数,1从下往上数 |
七个参数里最容易混的是参数3和参数4:N变量接的是行数,S变量接的是那一行的完整文本,别把两个变量填反。参数6默认不填就是包含匹配,只要那一行里含有你给的字符就算命中;想精确匹配整行内容再把它设成1。做字符串行数检测和文本列表定位时,这两个接收变量先分清楚,后面拆字段才不会错位。
配置步骤
第一步,先在QuestDiary目录下建好要检索的文本文件,每行一条记录,确认文件编码和引擎读取编码一致,避免中文乱码导致匹配不上。
第二步,在#IF条件段写入SDGetStringPosEX,按顺序填好文件路径、检测字符,再指定一个数字变量接行数、一个字符变量接行内容。
第三步,在#ACT段用SendMsg把<$STR(N1)>和<$STR(S1)>显示出来,进游戏测一次,确认返回的行数和行内容跟文本里实际对得上,再接后续发奖或跳转逻辑。
高频误操作
- 把参数4当成返回行数:实际第三个参数N变量才接行数,第四个参数S变量接整行内容,填反了取出来的内容全错。
- 包含匹配和完全匹配用反:参数6填0或空时只要行里含这个字符就命中,模糊查找够用;要做”整行完全相等”判断必须把参数6设成1。
- 路径模式和文件实际位置对不上:参数5设0是相对路径,相对的是M2根目录,写1才按绝对路径读,路径前缀写错会读不到文件。
- 同一字符在多行重复出现:这时候用参数7控制取哪一条,0从上往下数取第一条命中,1从下往上数,排行榜倒序读取就靠这个方向。
热点问答
1. 问:做自定义变量排行榜时,怎么从玩家数据列表里定位某个人所在行?
答:排行榜一般把玩家名字和数值按行写进一个文本文件,要查某人就用SDGetStringPosEX拿他的名字当检测字符,行数落到N变量、整行落到S变量,再把这一行的数值拆出来做展示。先把排序后的名单写进列表文件,再按名字反查行位置,比自己逐行读文件稳。(来源:看云,2026-06检索,已去隐私)
2. 问:排行榜面板要按自定义变量排序,列表文件怎么和脚本对应上?
答:先把玩家名字和对应数值按行写进同一个文本,每行一条;脚本端用SDGetStringPosEX按名字定位到那一行,S变量拿到整行后再按分隔符拆出数值。面板端按行号读,脚本端按名字反查行号,两边靠同一个文本文件对齐,排序规则在写文件那一步确定。(来源:天天脚本库,2026-08检索,已去隐私)
3. 问:用SDGetStringPosEX读出来的行数和内容是空的怎么办?
答:读空先查三点:一是检测字符跟文本里的实际内容是否完全一致,名字打错或多了空格就匹配不到;二是确认文本文件确实存在于参数1写的路径下,编码对得上;三是检查参数3、参数4指定的变量没被别的脚本占用覆盖。目标玩家不在线不影响这个命令,它读的是文件不是在线人物。(来源:天天脚本库,2024-08检索,已去隐私)
4. 问:SDGetStringPosEX适合用在哪些玩法场景里?
答:凡是”按一个关键字去文本里反查那一行”的场景都能用,比如玩家战力榜按名字查记录、充值名单核对、活动兑换码校验、家族花名册查询。把结构化数据按行写进QuestDiary下的txt,再用这个命令定位,比维护一堆独立变量清晰得多。
5. 问:检测命令写在#ACT段里为什么不生效?
答:SDGetStringPosEX是条件检测命令,只能放在#IF条件段做判断,写进#ACT动作段不会执行定位逻辑。正确做法是把命令连同参数写在#IF下,命中后在#ACT里再用<$STR()>把取到的行数和内容显示或做后续处理。
6. 问:要找的字符在文本里出现多次,命令取的是哪一行?
答:由参数7查找方向决定。填0时从上往下数,取第一次命中的那一行;填1时从下往上数。如果配合参数6做完全匹配、且文本里每条记录唯一,方向其实不影响结果;只有同一字符重复出现时,方向参数才决定取上面那条还是下面那条。
小结
检测字符串在列表中的行数用SDGetStringPosEX一条命令完成文本定位,行数走N变量、整行内容走S变量,配合参数6匹配模式和参数7方向就能应对模糊查找、精确定位、重复记录倒序取这几类需求。写排行榜、查玩家记录类脚本时,先把数据按行规整进文本,再用这个命令反查,比手动循环比对省事也更稳。
SDGetStringPosEX的七个参数按帮助文档逐条核对并在本地跑过,行数与内容返回与文档一致,仅适配SD插件,其他引擎需自行验证。
内容来源可溯:SD插件帮助文档(检测字符串在列表中的行数)。
扫描二维码推送至手机访问。
本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。
本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。













