在上两篇文章MoonBit国产编程语言读写CSV格式文件-基础篇和
MoonBit国产编程语言读写CSV格式文件-中级篇,介绍了MoonBit读写CSV格式文件的基础,对CSV格式内容数据进行解析处理。下面重点介绍了MoonBit读写CSV格式文件后,对input.csv文件数据解析处理符合自己要求,再整合数据后,最后写入新的CSV格式文件。
其中input.csv题库文件,内容如下:

重点要对上表中C列数据处理:
|
1 2 3 4 |
A-增大|B-减小|C-不变|D-无法确定 A-正确|B-错误 A-电流方向与电子定向移动方向相反|B-导体两端有电压就一定会产生电流|C-电压是形成电流的原因|D-在闭合回路中,电流处处相等 |
处理成下面output.csv文件格式,这样题库根据考试宝模板修改后,可以正常导入考试宝刷题。

一、创建MoonBit工程
在MoonBit工程空间文件夹下,打开命令终端,输入moon new read_write_csv_file,创建MoonBit工程。
二、安装需要的包
进入read_write_csv_file目录下,在此终端内,添加读写CSV文件包:moon add moonbitlang/x和解析CSV文件包:moon add maria/csv_parser

三、添加包的路径
使用VSCode打开新建的read_write_csv_file工程,打开cmd/main/moon.pkg.json文件,添加读写CSV文件的包路径:moonbitlang/x/fs和添加解析CSV文件的包路径:maria/csv_parser

四、编写主要功能实现代码
使用VSCode打开新建的read_write_csv工程,打开cmd/main/main.mbt文件(主函数main入口文件),添加下面代码:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
///| fn main { //println(@lib.fib(10)) //-------------------------------------------------------------------------------- let str_input_file = "./input.csv" let str_output_file = "./output.csv" try { //fs读取csv格式文件 let str_content = @fs.read_file_to_string(str_input_file, encoding="utf8") println(str_content) ////------------第1次数据处理------------ //使用默认设置-默认解析器: // 字段分隔符(默认值:',') // 引号字符(默认值:'"') // 跳过空行(默认值:true) let doc = @csv_parser.parse(str_content).unwrap() for item in doc { //println(item) //println(item[2]) ////------------第2次数据处理------------ //自定义配置 //使用不同的设置创建自定义解析器: let config2 : @csv_parser.CsvConfig = { delimiter: '|', quote: '"', skip_empty_lines: true, } let doc2 = @csv_parser.parse_with_config(item[2], config2).unwrap() for item2 in doc2 { println(item2) ////------------第3次数据处理------------ for item_child in item2 { //自定义配置 //使用不同的设置创建自定义解析器: let config3 : @csv_parser.CsvConfig = { delimiter: '-', quote: '"', skip_empty_lines: true, } let doc3 = @csv_parser.parse_with_config(item_child, config3).unwrap() for item3 in doc3 { println(item3) if item3.length() >= 2 { //数组添加需要的项 item.push(item3[1]) } else if item3.length() == 1 { if item3[0] == "选项" { //数组添加需要的项 item.append(["选项A", "选项B", "选项C", "选项D"]) } else if item3[0] != "" { //数组添加需要的项 item.push(item3[0]) } else { } } else { } } } } } //整合后,打印 for item in doc { println(item) } //整合后,转成csv格式(序列化) let csv = @csv_parser.document_to_string(doc) println(csv) //fs写入csv格式文件 @fs.write_string_to_file(str_output_file, csv, encoding="utf8") println("------执行完成------") } catch { e => println("读写文件错误提示: \{e}") } } |
编译运行:

生成了output.csv文件

output.csv文件

恭喜,成功了!
五、源码下载
1.CSDN博客:
2.CSDN下载