从 csv 文件中统计前几名相关信息
例题描述和简单分析
有 csv 文件,第一列是 id,第二列是 roomname,第三列是 date,第四列是 time,第五列是 LOB(length of booking),第六列是 PB(person booking),如下:
id,roomname,date,time,LOB,PB
1,Gower,2000-01-01,0:00:00,281,Jack
2,Usk,2000-01-01,0:00:00,291,Jack
3,Wye,2000-01-01,0:00:00,283,Jack
4,Bala,2000-01-01,0:00:00,282,Jack
5,Pen y Fan,2000-01-01,0:00:00,292,Jack
6,Llangorse,2000-01-01,0:00:00,290,Jack
7,Snowdon,2000-01-01,0:00:00,288,Jack
8,Taff,2000-01-01,0:00:00,296,Jack
9,Cadair Idris,2000-01-01,0:00:00,292,Jack
现在需要统计订房时间最长的 n 个房间的名字和订房时间。例如,n 为 5,结果如下:
1: Taff 296
2: Cadair Idris 292
3: Pen y Fan 292
4: Usk 291
5: Llangorse 290
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
A | |
1 | =file("csv.csv").import@tc(roomname,LOB) |
2 | =A1.top(n;-LOB) |
3 | =if(n==1,output("RoomName :"/A2.roomname/""/A2.LOB),output(A2.(#/": "/roomname/" "/LOB).concat@n())) |
简要说明:
设置网格参数 n
A1 读取 csv 文件中的 roomname 列和 LOB 列
A2 获取前 n 个 LOB(length of booking) 最大的记录,其中 n 为脚本的参数
A3 若 n 等于 1,输出订房时间最长的房间名和订房时间,否则输出订房时间最长的 n 个房间名和订房时间。
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。
https://stackoverflow.com/questions/63645363/read-csv-file-most-booked-rooms
英文版