产生文本直方图

 

问题

此问题的目的是用文本模拟出直方图。

下图是员工信息表,其中 DEPTNO 为员工所在的部门。

EMPNO ENAME DEPTNO
7934 Miller 10
7782 Clark 10
7839 King 10
7902 Ford 20
7788 Scott 20
7876 Adams 20
7566 Jones 20
7369 Smith 20
7900 James 30
7844 Turner 30
7654 Martin 30
7521 Ward 30
7499 Allen 30
7698 Blake 30

现在要用“文本直方图”显示出每个部门的职员数,一个星号“*”表示一个员工,使用横向的直方图得到的结果集应该如下:

DEPTNO CNT
10 ***
20 *****
30 ******

而使用纵向的直方图得到的结果集应该如下:

D10 D20 D30
*
* *
* *
* * *
* * *
* * *

请编写代码生成这种结果集。

思路

  1. 横向直方图:首先创建一序表,包含 DEPTNO 和 CNT 两个字段,将 DEPTNO 表按照部门分组,对着分组后的结果进行循环,依次插入部门和部门人数个 *;

  2. 纵向直方图: 首先新建一序表,字段名为动态读取的部门,依次对各个部门的人数进行统计,取得最大值,向序表中插入最大值条空记录,对着序表逐列循环,竖着修改序表,向序表中插入 *

代码

A B
1 =file("C:\\txt\\DEPTNO.txt").import@t() 读部门表
2 / 横向的直方图
3 =create(DEPTNO,CNT) 构造结果序表
4 =A1.group(DEPTNO) 按部门分组
5 for A4
6 =A3.insert(0,A5.DEPTNO,fill("*",A5.count())) 向序表中插入记录,第一个字段为部门,第二个字段为部门的人数个 *
7 / 纵向直方图
8 =create(${A3.(DEPTNO).concat(",")}) 结果序表,字段名动态读取部门
9 =A4.(~.count()) 计算部门的人数
10 =A9.max() 计算最大部门的人数
11 >A8.insert(A10) 根据最大部门数插入空记录
12 for A9
13 >A8.to(-A12).field(#A12,"*") 逐列填写 *

结果

A3 中返回的横向直方图

imagepng

A8 中返回的纵向直方图

imagepng