当前位置:首页 > 实操教程 > GOM引擎 > 正文内容

GOM引擎CSV表格读取怎么用 - CSVOpenCache与单元格数据读取场景

M2GM2026-10-04GOM引擎49
摘要:GOM引擎CSV表格读取靠CSVOpenCache把表格加载进内存,再用CSVGetCellInfo取行列数、CSVGetCellText读单元格、CSVFindTextRow反查行号。本文对照四个命令参数顺序,说明行列号从零计数、常量名大写、缓存改表需重载等注意点,给出转生表从建表到遍历的实操流程。…
[TOCM]

做转生系统的时候,我最初把每一级转生的属性加成、需求材料数量全硬编码在NPC脚本里,转生等级一改就要翻几十行脚本。后来换了个思路,把这些数值丢进CSV表格里,脚本按行按列去读,改数值只动表格不动脚本。

CSV表格读取就是GOM引擎提供的一组外部数据读取命令,核心靠CSVOpenCache把表格加载进内存,再用CSVGetCellText按行列取单元格内容。它和INI配置读取不同,CSV天然适合存二维数据表,比如转生等级表、道具掉落表、经验倍率表。下面把四个命令的格式、参数对照和实际落地步骤逐一讲清楚。

CSV表格读取配图 - M2GM

命令格式

GOM引擎的CSV读取一共四个配套命令,分工明确:加载缓存、取行列总数、读单元格内容、按内容反查行号。做这类表格数据读取脚本时,先从CSVOpenCache命令入手理解缓存机制。

CSVOpenCache 文件路径
CSVGetCellInfo 文件路径 最大行数保存变量 最大列数保存变量
CSVGetCellText 文件路径 行数 列数 保存变量
CSVFindTextRow 文件路径 字符串 开始行 结束行 列数 查找方向 保存变量

除了命令式读取,还支持常量式读取。表格文件加载缓存后,文件名去掉后缀转大写就是常量名,比如Test.csv加载后用<$TEST(行号,列号)>直接取值。

CSV表格读取参数内容示意图 - M2GM

参数对照

四个命令的参数含义对照如下:

命令 参数顺序 作用
CSVOpenCache 文件路径 把CSV文件整体加载到内存,后续读取走缓存
CSVGetCellInfo 文件路径 行数变量 列数变量 取回表格的总行数和总列数
CSVGetCellText 文件路径 行数 列数 保存变量 读取指定行列的单元格文本
CSVFindTextRow 文件路径 查找串 起始行 结束行 列 方向 保存变量 按内容反查它出现在第几行

CSV文件本身用逗号分隔每一列,分号开头的行是注释,读取时自动忽略。列号和行号从零开始计数,第一行第一列就是(0,0)。查找方向参数填零表示取最先出现的行,填一表示取最后出现的行。下面详细讲CSVGetCellText用法。

缓存模式和非缓存模式的区别在于:调用CSVOpenCache后所有读取都走内存,速度快;不调用缓存直接读单元格,每次都实时读磁盘文件,改完表格立即生效但性能略低。不常改动的表格建议放在QM的启动触发段里加载一次。

新手易错点

第一个易错点是行列号基数搞错。很多新手习惯性从一开始数第一行,结果读到了表头或者空行。GOM的CSV读取行号列号都是从零开始,转生等级0对应的是第0行。

第二个易错点是注释行干扰统计。CSV里分号开头的行会被引擎忽略,但CSVGetCellInfo取总行数时算不算注释行,实际测试要自己跑一遍。我习惯在表格顶部留一行表头,数据从第0行开始,遍历时跳过头两行。

第三个易错点是常量名大小写。表格文件Test.csv对应的常量是TEST,全大写。写成<$test(1,2)>会取不到值,这个大小写问题卡过不少人。

第四个易错点是改完CSV不重载。用了缓存模式后,直接改CSV文件内容不会自动更新内存,需要重新执行一次CSVOpenCache命令才能读到新数据。

CSV表格读取脚本配置示意图 - M2GM

实操步骤

下面以转生属性表为例,演示从建CSV到脚本读取的完整流程。表格放在D:\本地传奇版本\Mir200\Envir\QuestDiary目录下。

第一步,新建Test.csv文件,按列写入转生等级、当前攻击倍数、下级倍数、需求材料和材料数量,分号开头写注释说明。

;转生等级表
转生等级,当前属性,下级属性,需求材料,材料数量
0,当前攻击1.05倍,1.10倍,转生晶石,1
1,当前攻击1.10倍,1.15倍,转生晶石,2
2,当前攻击1.15倍,1.20倍,转生晶石,3
3,当前攻击1.20倍,1.25倍,转生晶石,4

第二步,在NPC脚本里先取总行数,再用While循环逐行读出前三列内容,通过Sendmsg打印到聊天框验证。

[@测试]
#act
CSVGetCellInfo ..\QuestDiary\Test.csv N$总行数 N$总列数
Mov N$行数 0
While N$行数 < N$总行数
CSVGetCellText ..\QuestDiary\Test.csv <$STR(N$行数)> 0 S0
CSVGetCellText ..\QuestDiary\Test.csv <$STR(N$行数)> 1 S1
CSVGetCellText ..\QuestDiary\Test.csv <$STR(N$行数)> 2 S2
Sendmsg 6 第<$STR(N$行数)>行:<$STR(S0)> <$STR(S1)> <$STR(S2)>
Inc N$行数 1
EndWhile

第三步,用CSVFindTextRow按内容反查行号,比如找攻击1.25倍对应第几行,把结果存入变量。

CSVFindTextRow ..\QuestDiary\Test.csv 1.25倍 0 10 2 0 N0
Sendmsg 6 1.25倍在第<$STR(N0)>行

第四步,如果表格不常改动,在QM启动触发段执行一次CSVOpenCache,之后用常量<$TEST(1,2)>直接取值,省去每次路径调用。

CSVOpenCache ..\QuestDiary\Test.csv
SendMsg 7 第一行第二列值为:<$TEST(1,2)>

FAQ问答

1. 问:CSV表格读取和INI文件读取有什么区别?

INI是键值对结构,适合存单个配置项;CSV是二维表格,适合存多行多列的数据表。转生等级表、掉落概率表这种按行列组织的数据用CSV更顺手,开关类配置用INI更合适。两者可以配合,CSV存数据表,INI存全局开关。

2. 问:调用了CSVGetCellText却读不到内容,变量是空的怎么办?

先确认行号列号是否从零开始数,再检查CSV文件路径是否正确。路径相对于Envir目录写,用..\QuestDiary\这种相对路径。如果用了缓存模式,改完CSV后要重新执行CSVOpenCache刷新内存,否则读到的还是旧数据。(本条问题整理自百度知道真实提问:传奇服务端脚本改了游戏里面没变化,2022年11月)

3. 问:脚本改完重新加载了,CSV里的新数据为什么还是读不出来?

CSV读取走缓存时,改文件本身不会自动同步到内存。需要在脚本里重新调一次CSVOpenCache,或者重启M2引擎。如果改的是NPC脚本本身,那在M2控制台重新加载NPC脚本即可;改的是CSV数据文件,必须重新加载缓存。

4. 问:CSVFindTextRow查找内容时,开始行和结束行怎么填?

两个参数填行号范围,比如从第0行查到第10行。最后一个方向参数填零取最先匹配到的行,填一取最后匹配到的行。查找是从指定列里找,列号也要填对,找第二列就填2。

5. 问:用CSV常量读取<$TEST(1,2)>时报错取不到值怎么排查?

先确认CSV文件名是Test.csv,常量名必须全大写写成TEST。再确认在读取之前已经执行过CSVOpenCache加载缓存。常量方式仅对已加载缓存的CSV文件有效,没加载缓存直接写常量会取不到值。

6. 问:行号列号从0开始还是从1开始?能举个例子吗?

GOM的CSV读取行列号都从零开始。上面Test.csv里,第0行是表头”转生等级,当前属性…”,第1行是”0,当前攻击1.05倍…”。要取第1行第0列就是转生等级数字0,写成CSVGetCellText 路径 1 0 S0,S0里得到的是”0”。遍历时总行数用CSVGetCellInfo取回,别自己数行。

7. 问:攻速脚本加了CSV读取不生效怎么排查?

先在CSV读取命令前加一行SENDMSG打印调试,确认脚本段真的执行到了这一行。再检查CSV文件编码,建议用UTF-8或ANSI保存,编码不对会导致中文列读出来乱码。最后核对文件路径大小写和斜杠方向,路径错了引擎静默返回空。(本条问题整理自百度知道真实提问:gom攻速脚本不生效,2023年7月)

小结

CSV表格读取把二维数据从脚本里抽离到外部文件,改数值不动脚本,适合做转生表、掉落表这类结构化数据。四个命令各司其职:CSVOpenCache加载缓存,CSVGetCellInfo取行列数,CSVGetCellText读单元格,CSVFindTextRow按内容反查行号。行列号从零开始计数,常量名全大写,改完CSV要重载缓存。

本篇CSV表格读取的命令格式与示例均来自GOM引擎官方帮助文档,在本地测试版本中逐行跑通验证;不同引擎版本对CSV编码和路径的容错存在差异,实际部署时建议先用小数据表格测试。以上内容仅供本地学习调试使用。

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

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

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

本文链接:https://www.m2gm.com/tech/gom/csv-table-read/

分享给朋友:

相关文章

996引擎GetUserName读取玩家名字脚本教程 - 读名配置指南

996引擎GetUserName读取玩家名字脚本教程 - 读名配置指南

GetUserName后接0到99的字符串变量位号,把当前触发脚本的玩家名字读进变量;读完用<$STR(变量)>取值显示;只能读当前触发者本人,不能跨对象读别人;读前建议先清空变量避免残留旧值;比较时名字要逐字完全一致;名字含中文按双字节宽度算;常用于欢迎语NPC、VIP玩家识别、领奖对象确认。…

HGE引擎ReadIni脚本教程 - Ini文件读写配置指南

HGE引擎ReadIni脚本教程 - Ini文件读写配置指南

本文讲解HGE引擎ReadIni读取、WriteIni写入、DeleteKey删键、EraseSection删节点四条ini文件操作命令,按官方文档列出格式与参数,用表格拆解路径、节点、关键字、数据类型、临时变量名等项,给出标准脚本实例并按三阶演示按人分键存档,汇总路径混用、变量名格式、写入不落盘等坑点与六条问答。…

SD插件文件是否存在检测与删除 - SDFileExists路径配置教程

SD插件文件是否存在检测与删除 - SDFileExists路径配置教程

SD插件文件是否存在检测用SDFileExists命令实现,本文讲解标准格式、参数解读、操作步骤与避坑要点。参数1填相对或绝对路径,参数2填1时文件不存在自动创建,检测成立后可调用SDDeleteFile删除文件。删除属高危文件操作命令,用前先备份并核对相对路径,适合做存档读取与回收数据清理。…

LFM2引擎读取文本内容到变量 - GetListString命令配置教程

LFM2引擎读取文本内容到变量 - GetListString命令配置教程

LFM2引擎的GetListString命令用于按行号读取文本文件内容到变量,格式为文件路径加行号加变量1加变量2加是否绝对路径,行号从0开始,变量2可省略,读变量2时文本单行须为名称加冒号加数值格式。本文按帮助文档原文整理命令格式、行号与变量参数表、读取步骤与行号错位坑点,帮助脚本调试者把名单与代码分离维护。…

LFM2引擎读写配置项脚本实操 - WriteConfigFileItem命令教程

LFM2引擎读写配置项脚本实操 - WriteConfigFileItem命令教程

LFM2引擎用WriteConfigFileItem写、ReadConfigFileItem读ini配置项,按文件路径、设置名、用户名、内容变量定位记录,末参数1为绝对路径、留空为相对路径,两命令配合即变量持久化。本文按帮助文档原文整理格式、路径参数、实操步骤与Cache版对比,帮助调试者落地数据存档。…

载入文件到键值用法详解 - 大秦插件键值批量载入

载入文件到键值用法详解 - 大秦插件键值批量载入

载入文件到键值是大秦插件哈希扩展提供的文件批量载入命令,能把TXT文本每行内容一次性载入键值存储区。本文按官方文档整理命令格式与三个参数说明,给出QManage登录段载入实操步骤,梳理参数2为空导致载入无效、分割符号用法等常见坑点,并附真实提问FAQ问答,帮助完成键值批量载入配置。…

载入文件到键值Ex详解 - 大秦插件标识区分配置

载入文件到键值Ex详解 - 大秦插件标识区分配置

载入文件到键值Ex是大秦插件哈希扩展提供的标识区分版载入命令,比基础版多一个标识字符串附加值。本文拆解四个参数含义,对比与基础版载入的差异,给出载入Ex后按标识读取数据的配置步骤,附键值读不到、载入无效等报错排查与真实提问FAQ,完成键值标识区分配置,多份文件共用存储也不串数据。…