产生文本直方图

l  问题

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

下图是员工信息表,其中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

 

 

*

 

*

*

 

*

*

*

*

*

*

*

*

*

*

*

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

l  思路

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

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

l  代码

 

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,"*")

逐列填写*

 

l  结果

A3中返回的横向直方图

A8中返回的纵向直方图