对 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