【语法】
一、隐蔽陷阱
把记录表导出成 CSV:直接用逗号拼接字段,字段里本身带逗号就把列全挤歪了——含逗号的字段要加引号包裹,引号本身还要翻倍转义。
二、底层原理
CSV 转义规则:字段含逗号、引号或换行时,用双引号包裹整个字段;字段内的引号写成两个引号。导出与解析对称实现,保证往返一致。样例字段 hi,all 导出为带引号的整段。
三、正确代码
基础写法(字段转义):
local function escField(v)
v = tostring(v)
if v:find('[,"]') then
v = '"' .. v:gsub('"', '""') .. '"'
end
return v
end
进阶写法(整表导出):
local function toCSV(rows)
local out = {}
for _, row in ipairs(rows) do
local cells = {}
for _, cell in ipairs(row) do
cells[#cells + 1] = escField(cell)
end
out[#out + 1] = table.concat(cells, ",")
end
return table.concat(out, "\n")
end
local p = getplayerbyname("csv01")
sendmsg(p, 1, toCSV({
{"name", "note"},
{"tom", "hi,all"},
}))
四、引擎验证
含逗号的 hi,all 被引号包裹导出为 tom,"hi,all";往返解析还原两行两列,一分不差。
五、FAQ
问:引号翻倍的作用?
答:区分包裹引号与内容引号。
问:能换分隔符吗?
答:把逗号换成制表符即 TSV。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、隐蔽陷阱 帮会矿地同时只允许 5 名成员进入采集:布尔锁只能放一人进出,多人配额的进出控制用什么结构才能既限流…
【游戏】 一、业务场景 帮会机密文件(战术、账目、人事)全混在公告栏,谁都能翻,战术外泄两次。机要室上线:机要文件按密级三档…
【语法】 一、隐蔽陷阱 存档传输出错无感知,读档时才发现数据错乱——普通求和校验太弱,两个字节位置对调后总和不变,错误照样漏…
【游戏】 一、业务场景 书院捐书研读要挂机 60 分钟,上班族时间碎片化根本读不完。书童上线:雇佣书童伴读,研读时间按双倍累…
【语法】 一、隐蔽陷阱 一个栈要支持随时取最小值:每次都遍历一遍是 O(n),数据量大时查询卡顿——辅助结构要加多少额外空间…
【游戏】 一、业务场景 两件半成品装备各有一条极品词条,分开用都是鸡肋。装备熔合上线:两件同部位装备熔合为一,词条池取两件并…