对 csv 文件中的每行进行校验并输出结果
例题描述和简单分析
有文本文件 txt.txt(第 2 列是数量,第 3 列为单价),如下所示:
111111,34,24.5,Apple
222222,53,22.0,Mango
333333,,32.0,Orange
44444,22,12.6,
需要按要求处理该文本文件,
1.字段有空,则输出行号和数据不足字样;
2.有空行则输出行号和空行字样;
3.简单的计算;
4.最后要附加空行和金额汇总,结果如下:
Transactions
================
Sold 34 Apple at £24.50
Line#2 is empty
Sold 53 Mango at £22.00
Line#4 is empty
Error in line#5: insufficient/invalid data
Line#6 is empty
Error in line#7: insufficient/invalid data
Total sales: £1999.00
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
A |
|
1 |
=file("txt.txt").import@cw() |
2 |
>total=0 |
3 |
>A1.run(if(~==[]:~="Line#"/#/" is empty",~.pos(null):~="Error in line#"/#/": insufficient/invalid data";total+=~(2)*~(3),~="Sold "/~(2)/""/~(4)/" at £"/format("%-5.2f",~(3)))) |
4 |
="\nTransactions\n================" |
5 |
="\nTotal sales: £"/format("%-6.2f",total) |
6 |
=file("result.txt").export(A4|A1|A5) |
简要说明:
A1 @c表示用逗号分隔列,@w 表示返回序列的序列
A2 定义网格变量 total 并赋初值 0
A3 遍历序列 A1,若当前序列是空集,则输出行号和空行字样,若当前序列有成员为 null,则输出行号和数据不足字样,否则计算商品数量 * 单价
A4 需要输出的头部信息
A5 需要输出的尾部信息(金额汇总)
A6 结果导出至 result.txt
https://stackoverflow.com/questions/59344061/read-empty-line-in-text-file
英文版