产生文本直方图
问题
此问题的目的是用文本模拟出直方图。
下图是员工信息表,其中 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 |
---|---|---|
* | ||
* | * | |
* | * | |
* | * | * |
* | * | * |
* | * | * |
请编写代码生成这种结果集。
思路
-
横向直方图:首先创建一序表,包含 DEPTNO 和 CNT 两个字段,将 DEPTNO 表按照部门分组,对着分组后的结果进行循环,依次插入部门和部门人数个 *;
-
纵向直方图: 首先新建一序表,字段名为动态读取的部门,依次对各个部门的人数进行统计,取得最大值,向序表中插入最大值条空记录,对着序表逐列循环,竖着修改序表,向序表中插入 *
代码
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 中返回的横向直方图
A8 中返回的纵向直方图
英文版
数据文件
DEPTNO.txt