进阶-CSV和EXCEL处理

CSV

$csv提供了关于csv格式操作的读和写操作, 有两个函数: writeread

过调用$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的支持(xlsxlsx文件的读写)需要安装插件, 稍后会完善这方面的文档