当前位置:首页 > 实操教程 > 996引擎 > 996引擎CSV表格读取脚本实操教程 - 表格加载与行列取值配置

996引擎CSV表格读取脚本实操教程 - 表格加载与行列取值配置

M2GM2026-08-16996引擎33
摘要:本文详解996引擎CSV表格读取脚本的两种调用模式,常量模式通过cfg_前缀常驻内存配合<$cfg_guanzhi(1_1)>取值,即时模式用NEWDQCSV、GetHLCSV、GetGJCSV按路径实时查询,附三阶案例、零基础实操步骤、行列计数避坑与常见报错修复,供脚本定制学习者本地调…
[TOCM]

CSV表格读取脚本996引擎用于加载外部配置表、按行列精准取值的核心数据交互功能,适配本地版本技术调试与脚本定制学习场景,支持常量常驻内存与即时读取两种调用模式。

新手做官职、掉落、技能配置时经常卡在”表读不出来、行列对不上、变量存不进”,掌握这套读取逻辑后可直接把CSV配置接入NPC脚本,零基础也能落地调试解决数据读取问题。

996引擎CSV表格读取脚本实操教程 - 表格加载与行列取值配置

命令原理

CSV表格读取在996引擎里分两条路径。第一条是常量模式,用NEWREADCSV加载带cfg_前缀的表格后,数据以常量形式常驻内存,适合不常改动的基础配置,建议放在QM触发的[@Startup]里启动执行一次,后续直接用<$cfg_表名(行_列)>取值,读取速度快、不反复读盘。

第二条是即时模式,同样用NEWREADCSV加载,再配合NEWDQCSV、GetHLCSV、GetGJCSV按路径实时查询,适合频繁变动或临时检索的表格,每次调用都从指定路径读取,灵活但要注意路径一致。

两种模式底层都是按行列索引定位单元格,行列默认从0开始计数,这一点和Excel从1开始不同,新手最容易在这里错位。

命令格式

常量模式标准格式:

NEWREADCSV ..\Data\cfg_guanzhi.csv

表格文件名前加cfg_前缀,读取时以常量形式存放在内存中,建议放在QM的[@Startup]启动触发里执行一次。加载后通过以下变量读取:

<$cfg_guanzhi(1_1)>
<$GetTypeBRow(cfg_guanzhi,4,11)>
<$GetTypeERow(cfg_guanzhi,5,11)>
<$Getcsv(cfg_文件名,Row)>
<$GetCsv(cfg_文件名,Col)>

即时模式标准格式:

NEWREADCSV 路径
NEWDQCSV 路径 行数 列数 存到变量
GetHLCSV 路径 0,1 存到变量
GetGJCSV 路径 字符串 开始行号~结束行号 查找列 0或1 存入变量

拆解说明:NEWREADCSV只负责加载,NEWDQCSV负责取具体单元格,GetHLCSV负责取行列总数,GetGJCSV负责按关键字反查行号。四个命令配合使用可覆盖CSV读取的全部场景。

参数详解

常量模式变量参数

参数内容 参数释义 实操用法
<$cfg_guanzhi(1_1)> 读取指定行列的单元格值,行列可套用任意变量,从0开始 直接在#ACT里SENDMSG 6 <$cfg_guanzhi(1_1)>输出,或赋值给S变量做判断
<$GetTypeBRow(cfg_guanzhi,4,11)> 取第4列中关键字11所在的起始行,从0开始 用于定位某官职ID在表中的第一行,配合循环读取整段配置
<$GetTypeERow(cfg_guanzhi,5,11)> 取第5列中关键字11所在的最后一行,从0开始 与GetTypeBRow配对,确定关键字覆盖的行区间
<$Getcsv(cfg_文件名,Row)> 获取表格最大行数,从1开始计数 建议启动时获取并存入N变量,避免每次循环重复调用
<$GetCsv(cfg_文件名,Col)> 获取表格最大列数,按第1行计算,从1开始 用于校验表格列数是否符合脚本预期

即时模式命令参数

参数内容 参数释义 实操用法
NEWREADCSV 路径 加载指定路径的CSV表格内容 路径写相对路径,如..\QuestDiary\test.csv,加载成功后才能读取
NEWDQCSV 路径 行数 列数 变量 读取第几行第几列内容,0行0列开始 NEWDQCSV ..\QuestDiary\test.csv 2 2 S0,把第二行第二列存入S0
GetHLCSV 路径 0,1 变量 获取最大行数或列数,0=行数1=列数 GetHLCSV ..\QuestDiary\test.csv 0 N0,把最大行数存入N0
GetGJCSV 路径 字符串 行区间 查找列 0或1 变量 取字符串在表格中的行号 GetGJCSV ..\QuestDiary\test.csv 测试 0~10 2 0 N0,在第2列0到10行找”测试”的起始行

拓展案例

初级入门案例:常量模式读取官职名称

把cfg_guanzhi.csv放到Data目录,在QM的[@Startup]里加一行NEWREADCSV ..\Data\cfg_guanzhi.csv,重启版本后在任意NPC脚本里直接输出:

[@读取官职名]
#IF
#ACT
SENDMSG 6 第一行第一列官职名称:<$cfg_guanzhi(0_0)>

这个案例不依赖额外变量,新手复制即可验证常量是否加载成功,和下面的实操步骤案例完全独立。

中级优化案例:关键字区间循环读取

利用GetTypeBRow和GetTypeERow锁定某个官职ID覆盖的行范围,再用FOR循环批量读出该官职的全部属性:

[@批量读取官职]
#IF
#ACT
MOV N1 <$GetTypeBRow(cfg_guanzhi,4,11)>
MOV N2 <$GetTypeERow(cfg_guanzhi,5,11)>
FOR N3 N1 N2
  SENDMSG 6 第<$STR(N3)>行属性:<$cfg_guanzhi($STR(N3)_1)>
ENDFOR

这里的增量细节是行列参数可以套用<$STR(N3)>这种变量形式,不需要写死数字,适合配置表行数不固定的场景。

高阶定制案例:即时模式关键字反查+动态取值

先加载表格,再用GetGJCSV按玩家输入的关键字反查行号,最后用NEWDQCSV读出该行对应列的内容,实现玩家自定义查询:

[@玩家查询官职]
#IF
#ACT
NEWREADCSV ..\QuestDiary\test.csv
GetGJCSV ..\QuestDiary\test.csv <$STR(S10)> 0~100 0 0 N0
NEWDQCSV ..\QuestDiary\test.csv <$STR(N0)> 1 S11
SENDMSG 6 <$STR(S10)>对应的说明是:<$STR(S11)>

增量细节是GetGJCSV的行区间参数建议根据表格实际大小设定,表内容太大时整张表取会慢,限定0~100这种区间能明显提升读取速度,这是全网教程里很少提到的重载避坑点。

实操步骤

第一步,确认CSV文件编码为ANSI或GBK,用记事本另存为时选择编码,避免中文乱码。把表格放到对应目录,常量模式放..\Data\并改名为cfg_xxx.csv,即时模式放..\QuestDiary\即可。

第二步,常量模式在QM脚本的[@Startup]段添加NEWREADCSV ..\Data\cfg_guanzhi.csv,保存后重载QM触发或重启本地服务端,让表格以常量形式进入内存。

第三步,在NPC脚本的#ACT里调用<$cfg_guanzhi(行_列)>取值,行列从0开始,例如要取第二行第三列就写<$cfg_guanzhi(1_2)>,用SENDMSG 6输出验证。

第四步,即时模式在脚本段内先NEWREADCSV加载,再用NEWDQCSV读取到S变量,最后用<$STR(S0)>输出。GetHLCSV取行列总数时,0参数取行数、1参数取列数,结果存入N变量。

第五步,全部修改完成后,在版本管理面板重载对应脚本或重启本地服务端使配置生效,进游戏触发NPC验证读取结果。

避坑指南

行列计数一定要分清,常量变量<$cfg_guanzhi(1_1)>和NEWDQCSV都是从0开始,而Getcsv取最大行数是从1开始,混用会导致最后一行读不到或数组越界。

cfg_前缀只在常量模式下生效,文件名必须严格是cfg_开头,否则<$cfg_xxx()>变量读不到值,会返回空。即时模式不需要cfg_前缀,路径写完整相对路径即可。

NEWREADCSV加载一次即可,常量模式放在[@Startup]里启动执行,不要在每个NPC脚本里重复加载,频繁读盘会增加本地服务程序开销。即时模式如果表格内容不变,也建议加载一次后复用。

GetGJCSV的行区间参数不要写太大,表内容过多时全表扫描会明显变慢,根据实际数据量设定050、0100这种合理区间,同时第5个参数0代表取起始行、1代表取最后一行,不要填反。

路径里的反斜杠要用双反斜杠或相对路径格式,..\QuestDiary\test.csv这种写法是标准的,不要写成绝对路径,换机器后容易失效。

报错修复

问题现象:SENDMSG输出为空,单元格读不到值

核心成因:常量模式下表格未成功加载,或文件名缺少cfg_前缀,或行列索引写错。

分步排查:先检查QM的[@Startup]里是否有NEWREADCSV且路径正确,再确认Data目录下文件名是否为cfg_guanzhi.csv,最后核对行列是否从0开始、是否超出表格实际范围。

完整落地修复方案:在[@Startup]的NEWREADCSV后加一行SENDMSG 6 表格加载成功,重启版本看是否弹出提示;如果没弹出说明路径错误,修正为..\Data\cfg_guanzhi.csv;如果弹出但取值为空,把行列改成<$cfg_guanzhi(0_0)>验证第一格,确认能读到后再调整到目标行列。

问题现象:GetGJCSV返回的行号不对,找不到关键字

核心成因:查找列参数填错,或关键字与表格内容不完全一致(含空格、大小写差异),或行区间设置过小没覆盖到目标行。

分步排查:先确认要查找的关键字在表格第几列,把GetGJCSV的第4个参数改成对应列号;再用记事本打开CSV检查关键字前后是否有空格;最后把行区间放大到0~200测试。

完整落地修复方案:GetGJCSV ..\QuestDiary\test.csv 测试 0~200 2 0 N0,确保第4参数是关键字实际所在列,关键字字符串和表格内容完全一致,行区间覆盖全部数据,第5参数0取首次出现行、1取最后出现行,按需选择。

问题现象:中文内容读取后显示乱码

核心成因:CSV文件编码与996引擎脚本编码不一致,引擎默认读取GBK/ANSI编码。

分步排查:用记事本打开CSV,点另存为,看底部编码是否为ANSI;如果是UTF-8就会乱码。

完整落地修复方案:记事本另存为,编码选ANSI,覆盖原文件,重新加载表格即可正常显示中文。

FAQ问答

CSV表格读取支持哪些文件格式?

仅支持标准CSV逗号分隔格式,用Excel另存为CSV(逗号分隔)即可,不支持xlsx直接读取。

常量模式和即时模式哪个更快?

常量模式加载一次常驻内存,后续取值速度快,适合固定配置;即时模式每次读盘,适合频繁变动的数据,按需选择。

行列索引到底从0还是从1开始?

<$cfg_xxx()>、NEWDQCSV、GetTypeBRow、GetTypeERow全部从0开始;只有Getcsv取最大行数、GetCsv取最大列数从1开始,注意区分。

一张表最多能存多少行多少列?

996引擎本地调试环境下CSV没有硬性行数限制,但GetGJCSV扫描时建议限定行区间,行数过大会拖慢读取速度。

NEWREADCSV可以加载多个表格吗?

可以,在[@Startup]里多行NEWREADCSV分别加载不同cfg_前缀的表格,各自独立存储互不影响。

GetHLCSV的0和1参数怎么选?

0代表获取最大行数,1代表获取最大列数,结果存入N变量,不要和GetGJCSV的第5参数混淆。

修改CSV后需要重启吗?

常量模式需要重载QM触发或重启本地服务端才能重新加载;即时模式每次调用都重新读取,修改后直接生效。

读取的值可以直接用来做IF判断吗?

可以,把NEWDQCSV读到的值存入S变量后,用EQUAL S变量 关键字做判断,或把数值存入N变量做大小比较。

全文总结

CSV表格读取脚本通过NEWREADCSV加载、常量变量或NEWDQCSV取值、GetHLCSV取行列总数、GetGJCSV反查行号,完整覆盖了996引擎外部配置表的数据交互需求。常量模式适合固定配置常驻内存,即时模式适合灵活查询,掌握行列从0开始、cfg_前缀、路径规范这几个要点后,零基础也能把官职、掉落、技能等配置表接入脚本,用于本地版本技术研究与功能测试。



扫描二维码推送至手机访问。

本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。

本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。

本文链接:https://www.m2gm.com/tech/996/1786686718/

分享给朋友:

相关文章

GOM引擎BindUseItem脚本教程 - 物品人物绑定设置与信息查看方法

GOM引擎BindUseItem脚本教程 - 物品人物绑定设置与信息查看方法

本文基于GOM引擎,聚焦BindUseItem脚本功能,详细拆解物品人物绑定的命令格式、核心参数,提供初、中、高三阶差异化实操案例,汇总新手避坑要点与常见报错修复方法,助力零基础学习者落地调试专属物品绑定功能。…

996引擎ReadExcel脚本教程 - Excel表格数据读取与报错调试

996引擎ReadExcel脚本教程 - Excel表格数据读取与报错调试

本文详解996引擎ReadExcel读取表格脚本完整用法,包含命令格式、参数、三阶实操案例,梳理路径格式要求,针对读取为空乱码给出修复方案,方便脚本学习者调试。…

ESP插件ESPSplitNumber脚本教程 - 数字拆分赋值变量实操与配置方法

ESP插件ESPSplitNumber脚本教程 - 数字拆分赋值变量实操与配置方法

本篇文章针对ESP插件ESPSplitNumber脚本进行全方位实操讲解,涵盖命令原理、参数详解、三阶实操案例、落地步骤及常见报错修复,零基础学习者可直接照搬调试,快速实现数字拆分变量赋值功能。…

ESP插件文件操作脚本教程 - 读写删改配置文件实操调试方法

ESP插件文件操作脚本教程 - 读写删改配置文件实操调试方法

本文聚焦ESP插件文件操作脚本,全面讲解各类文件、配置操作指令的原理、格式与参数用法,搭配三阶差异化实操案例,分享新手避坑技巧与常见报错修复方法,帮助零基础学习者快速掌握版本文件调试与脚本定制技巧。…

翎风引擎个人商店摊位上下架触发脚本教程 - 物品拦截设置与变量调用方法

翎风引擎个人商店摊位上下架触发脚本教程 - 物品拦截设置与变量调用方法

本篇实操教程围绕翎风引擎个人商店摊位上下架触发脚本展开,详细拆解脚本命令原理、参数用法,提供初/中/高三阶差异化案例,搭配完整实操步骤、避坑要点与报错修复方案,帮助零基础学习者快速掌握物品上下架拦截功能调试技巧。…

大秦插件伤害加成脚本教程 - 人物物攻魔攻加成设置与超时修复

大秦插件伤害加成脚本教程 - 人物物攻魔攻加成设置与超时修复

本文针对大秦插件两款伤害加成脚本展开全面实操教学,详细拆解物理、魔法伤害加成命令的参数格式、适用场景,提供初高阶差异化案例,汇总新手避坑要点与常见报错修复方案,帮助零基础学习者快速掌握脚本配置技巧。…

ESP插件ESPRandomText脚本教程 - 随机字符串与物品抽取配置方法

ESP插件ESPRandomText脚本教程 - 随机字符串与物品抽取配置方法

本文针对ESP插件ESPRandomText脚本展开全面实操教学,介绍脚本两种随机抽取格式与核心参数,搭配初高阶差异化案例,讲解实操步骤、避坑要点与报错修复方案,帮助零基础学习者快速掌握随机字符串抽取功能调试技巧。…