当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇GetListString命令格式错误与读取异常排查

热度:
GetListString命令用于逐行读取文本文件,将内容赋值给字符串变量。报错“脚本命令:MOV...参数1:<$STR(N主线段数)>参数2:1”说明错误发生在MOV命令,而非GetListString。但读取始终为第一行,是文件路径与命令用法有误。

一、GetListString命令完整语法

格式:GetListString文件路径行数变量接收变量
•文件路径:相对Mir200\Envir目录的文本文件路径。必须使用双反斜杠\\或正斜杠/,单反斜杠会被解析为转义符。

•行数变量:整数型变量(如N、P、D系列),指定从第几行开始读取。行数从0开始计数,即0代表第一行,1代表第二行。

•接收变量:字符串型变量(如S、A系列),用于接收读取到的行内容。必须为S$开头的变量,N系列变量无法存储字符串。

二、当前脚本错误分析与修正

原脚本与文件结构如下,存在三处关键错误:
#IF
CHECK[102]1
#ACT
;错误1:行数变量赋值错误
MOV<$STR(N主线段数)>1
;错误2:文件路径分隔符与读取逻辑
GetListString..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt<$STR(N主线段数)><$STR(S$主线名称)>

;文件主线名称.txt内容
被废弃的村庄1:皇族埋骨地一层1
被废弃的村庄1:皇族埋骨地一层2
被废弃的村庄1:皇族埋骨地一层3


错误1:MOV命令参数格式错误

•原句:MOV<$STR(N主线段数)>1

•问题:MOV命令的目标变量(参数1)必须是变量名本身,而非<$STR(...)>格式。<$STR(...)>用于输出变量值,不能作为赋值目标。

•修正:MOVN主线段数1

•作用:将数字1赋值给变量N主线段数。此行决定了从文件第几行读取(从0开始,1代表第二行)。

错误2:文件路径分隔符与读取逻辑

•原句:GetListString..\QuestDiary\二明专用\任务系统\任务变量\主线名称.txt...

•问题:

1.Windows路径中单反斜杠\是转义符,在脚本中必须写为\\或使用/。
2.N主线段数被赋值为1,意味着从第二行(索引1)开始读取。但若要循环读取所有行,此逻辑不完整。
•修正:GetListString..\\QuestDiary\\二明专用\\任务系统\\任务变量\\主线名称.txt<$STR(N主线段数)>S$主线名称

•注意:接收变量参数直接写S$主线名称,不需要<$STR(...)>括起来。

错误3:缺少行数自增与循环,导致只读第一行

即便修正了上述错误,脚本仍只会读取一行。因为每次执行GetListString后,行数变量N主线段数的值没有增加,下次读取还是同一行。需添加循环与自增逻辑。

三、完整修正脚本示例(循环读取文件)

以下脚本会从第一行开始,依次读取文件每一行并存入S$主线名称,然后发送给玩家,直至文件末尾。
#IF
CHECK[102]1
#ACT
;初始化行数变量,0代表第一行
MOVN主线段数0
;开始循环标签
[@ReadNextLine]
;读取指定行,存入S$主线名称
GetListString..\\QuestDiary\\二明专用\\任务系统\\任务变量\\主线名称.txt<$STR(N主线段数)>S$主线名称
;判断是否读取成功(读取到文件末尾时,S$主线名称会为空)
#IF
EQUALS$主线名称
#ACT
;文件读完,跳出循环
SENDMSG6文件读取完毕。
GOTO@End
#ELSEACT
;成功读取一行,进行处理
SENDMSG6读取到内容:<$STR(S$主线名称)>
;行数变量+1,准备读取下一行
INCN主线段数1
;跳回循环开始,读取下一行
GOTO@ReadNextLine
[@End]
;循环结束,执行后续逻辑


注意:GetListString读取文件末尾时,接收变量S$主线名称会被清空。利用EQUALS$主线名称判断是否读完是标准做法。

四、重要补充与排错

1.文件编码:确保主线名称.txt文件以ANSI编码保存。若保存为UTF-8,读取内容将是乱码。
2.文件路径:若脚本仍报“filenotfound”,请检查路径中每个文件夹是否存在。..\\代表上一级目录(即Mir200\Envir的上级目录Mir200),然后向下寻找。建议使用绝对路径避免歧义,如D:\MirServer\Mir200\Envir\QuestDiary\...。
3.变量作用域:确保N主线段数是个人私有变量(N系列),在循环过程中不会被其他脚本重置。
[顶部]