进阶-CSV和EXCEL处理
CSV
$csv
提供了关于csv格式操作的读和写操作, 有两个函数: write
和read
写
过调用$csv.write()
函数来将数据写成csv的格式, 参数可以不传入, 也可以传入文件路径, 或者传入一个实现了Writer接口的对象
这个函数返回了[csvWriter, error]
, 一般使用with ... as ...
或者assert
来处理
csvWriter包含以下函数:
write
写入一行数据flush
将缓存区的数据写入close
关闭写入bytes
(如果参数不是文件路径才有) 读取整个写入的结果writeAll
写入多行数据, 参数要求为[][]string
此外还有以下成员变量:
writer
可以获取到原生对象buff
(如果参数不是文件路径才有) 获取到内存中的写入缓冲区
输出完毕之后, 别忘了调用flush函数, 如果是输出到文件, 最后要调用close, 才能确保内容被写入、开启的文件被关闭
示例代码
// 写到内存
var w = assert($csv.write()) // 不传参数
// defer w.close() // 如果是写文件, 可以用defer确认关闭
assert(w.write("姓名", "年龄"))
assert(w.write("xxx", "22"))
for (var i = 0; i < 10; i++)
assert(w.write(`人物${i}`, 100+i))
w.flush()
var result = w.bytes().s
print(result)
// 写到文件
with assert($csv.write("test.csv")) as w {
assert(w.write("姓名", "年龄"));
["张三", "李四"].map((e,i)=>w.write(e, 100+i))
}
读
$csv.read
函数提供了读取csv格式文件/二进制流并解码的能力
可以传入以下参数:
- 文件路径
- []byte
- 实现了Reader接口的对象
函数返回了[csvReader, error]
, 一般使用with ... as ...
或者assert
来处理
csvReader包含以下函数:
read
读取数据readAll
读取全部数据close
关闭(文件)
此外还有以下成员变量:
reader
可以获取到原生对象
如果是从文件读取, 使用完毕之后, 别忘了调用close函数, 建议使用with ... as ...
或 defer
保证关闭
示例代码
// 从文件中读取
with assert($csv.read("test.csv")) as r {
for {
var [line, error] = r.read()
if (error) {
print(`文件读取结束:`, error.Error())
break
} else {
print(`读取到一行:`, line)
}
}
}
// 从内存读取并一次性读取全部
var content = `张三,888
李四,999
王五,777`.bs // 转成[]byte格式, 以避免被认为是文件路径
var result = assert(assert($csv.read(content)).readAll())
print(`所有数据:`, result) // 读取到[][]string
print(result.map([n, e]=>`姓名: ${n}, 备注: ${e}`).join('\n'))
EXCEL
excel的支持(xls
和xlsx
文件的读写)需要安装插件, 稍后会完善这方面的文档