匿名
未登录
中文(中国大陆)
登录
「荏苒之境」
搜索
查看“︁模块:Csv”︁的源代码
来自「荏苒之境」
命名空间
模块
讨论
更多
更多
页面操作
阅读
查看源代码
历史
清除缓存
←
模块:Csv
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
--[[ CSV Library v1 (Author: Michael Lutz, 2022-12-14) Built on: http://lua-users.org/wiki/LuaCsv csv.load = function(filename, delimiter, header) filename := CSV file to load delimiter := Delimiter (";", ",", "\t", etc..), default = ',' header := (optional) if first line is a header (true/false), default = false automatically removes quotes from text returns a table csv.save = function(filename, delimiter, data, header) filename := CSV file to write to delimiter := Delimiter (";", ",", "\t", etc..), default = ',' data := a Lua table that holds the rows and columns header := a Lua table that holds the names of the columns e.g. { "Name", "Address", "Email", ... } --]] local function parse_row(input, sep, pos) local row = {} local pos = pos or 1 --io.read() while true do local c = string.sub(input,pos,pos) if (c == "") then break end if (c == '"') then local text = '' local s,e,txt,c1 repeat s,e,txt,c1 = string.find(input, '^(.-")(.)', pos+1) text = text..txt pos = e --print(txt, e, c1) until ((c1 == sep) or (c1 == "\r") or (c1 == "\n")) --print(string.sub(text,1,-2), c1) table.insert(row, string.sub(text,1,-2)) c = c1 pos = pos + 1 else local s,e,text,c1 = string.find(input, "^([^%"..sep.."\r\n]-)([%"..sep.."\r\n])", pos) pos = e+1 --print(text, c1) table.insert(row, text) c = c1 end if c == "\n" then return row, pos end if c == "\r" then return row, pos+1 end end end csv = {} csv.parse = function(csv, delimiter, header) sep = string.sub(delimiter,1,1) or ',' local pos = 1 local t_csv = {} local f_header = nil local t_header = {} if header then t_header,pos = parse_row(csv, sep, pos) local head = {} for i,v in ipairs(t_header) do head[v] = i end f_header = function (t,k) local i = head[k] if i then return t[i] end return nil end end local row = {} row, pos = parse_row(csv, sep, pos) while row do if header then setmetatable(row, { __index = f_header }) end table.insert(t_csv, row) row, pos = parse_row(csv, sep, pos) end return t_csv, t_header end local function format_csv(str, sep) local str, matches = string.gsub(str or "", '"', '""') if (string.find(str, "[%"..sep.."\r\n]") or (matches > 0)) then return '"'..str..'"' end return str end csv.format = function(delimiter, data, header) r = {} sep = string.sub(delimiter,1,1) or ',' if header then for i,v in ipairs(header) do r[#r+1] = format_csv(v, sep) r[#r+1] = sep end r[#r] = "\n" end for i,v in ipairs(data) do for i2,v2 in ipairs(v) do r[#r+1] = format_csv(v2, sep) r[#r+1] = sep end r[#r] = "\n" end return table.concat(r) end return csv
该页面使用的模板:
模块:Csv/doc
(
查看源代码
)
返回
模块:Csv
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
wiki工具
wiki工具
Cargo数据
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志