第七章 LIST
<回「入门讲义」>
List
是 AREMOS/Windows 语言里很方便而强有力的工具。简单说,一个
list 是「a
collection of names」,代表一群 objects。如果要反复对某一群
objects 做操作,我们可先产生一个 list 来代表这群 objects。只要对这个
list 做操作,就相当于对那群 objects 做操作。同时 list 本身也是一种
(type)
object,可存在 bank 里;或也可以
C
碟上的一个 file 来保存,随时取用。
本章介绍三种不同的方法产生
list。
7.1
使用
List
指令来产生 list
最简单产生
list 的方法是使用典型的 object
command,即以 list 指令来产生一个 list。看下面范例说明:
(1)键入指令
list
n1=gnp,cp,gnp96;
(2)键入指令
list
listf n2=gdp,gdp96;
(3)键入指令
set
freq q; set per 1985:1 1986:4; open niaq;
(4)键入指令
print
#n1;
(5)键入指令
print
#(listf n2);
(6)键入指令
display
n1;
(7)键入指令
view
n2.lst;
(8)Tools
→ AREMOS Editor → Files → Open → 磁盘驱动器( C 槽) → All files
(在文件类型处)
→ n2.lst → 确定
(9)File
→ Exit
(10)键入指令
open<pri>mybank;
(11)键入指令
copy
list n1;
(12)键入指令
open
mybank;
(13)键入指令
copy
list n1;
说明:
(1):在第六章 6.1 节曾介绍产生 object 的 object command 一般型式是:
objecttype objectname=definition;
在此乃是以 list 指令 (object type) 产生一个 list,名叫 n1(objectname),而
n1 的内容即为 gnp、cp、gnp96,3 个 names。同时 n1 本身是一个
object,被产生后即存放在 work
bank 里。
注意:您可直接键入指令,也可用鼠标操作,Data →
List → 键入 n1(在 Name 处) → 键入 gnp,cp,gnp96 (在 list Item Text
处)
→ OK(如图 7.1.1 )。
【图7.1.1】
(2):此指令可产生另一个
list,名叫 n2,其内容为 gdp,gdp96 二个 names。但在 list 指令后面如果加上
listf (即l istfile 之简称),则所产生的 n2 并不是存在 work
bank 里的一个 list,而是存在 C 碟上<WAREM32>的一个 file (就叫做
list
file),其 filename 为 n2.lst。若您用鼠标操作,在 List Edit And
Display 的画面上,必须键入 listfn2 (在 Name 处)。
(4):一旦产生
n1,我们可用 n1 来替代它所代表的 3 个 objects。使用方法乃在前面加「#」符号。在此,print
#n1 相当于 print gnp,cp,gnp96。因 n1 只含 3 个 objects,尚感觉不出
list 的威力。如果 n1 含上百个或上千个 objects,便可了解
list 可节省我们不少 key
in 的人力时间。
(5):此指令与(4)式相同,只是
C 碟上的 list 后面总要加 listf。此指令相当于 print
gdp,gdp96。
(6):此指令可印出
n1 所代表的 3 个 names。
(7):范例(二)已介绍过,view
指令可查看 C 碟上的 file。
(8):使用
AREMOS
Editor 去查看 n2.lst file,如有必须,可用此编辑程序来增加或减少
n2 里的 names。
(9):跳出
AREMOS
Editor 系统。
(10):open
一个新的 bank 叫 mybank,同时指定其为 primary
bank。原来的 work bank 已不再是 primary bank。
(11):此指令把
work
bank 里的 n1 copy 到 primary bank (在此为 mybank)以便能够把 n1
这个 object 放在 mybank 里保存起来。注意:copy 可把任何
object 从已 open 的数据库中拷到 primary
bank。
(12)(13):将来再进入
AREMOS,可把存放在 mybank 里的 n1 随时 copy 出来使用。不过,如以
listfile 型式保留在 C 碟,例如 n2.lst,则随时可使用,不需如此拷来拷去。
<回页首>
7.2
使用 Index
指令来产生 list
上节所介绍以
list 指令产生 list 方法,乃是土法炼钢,把 names 逐一输入。现在介绍第二种产生
list 方法则是利用 Index
Bank Objects 的方法。第三章已介绍过,index 方法可在线 (online)
查询已 open 的 banks 中之 object,尤其可利用 wildcard
characters 「*」与「?」。Index Bank Objects 后,在「Save Names
In List」处,键入 n3 (为设定 list 的 name),则计算机会把 index
所查询到的所有 object
names 自动形成一个 list,而以该指定的 list name (即 n3 )为此新产生的
list
的name。以下面范例说明(用鼠标操作):
(1)Data
→ Bank → Open → Files → 磁盘驱动器 (看看自己的数据库放在那一槽)
→niaq.bnk → 确定 → Open → Cancel 跳回主画面
(2)Data
→ Bank → Index → 键入指令 niaq:gnp*.q(在 Name(s) or Wildcard 处)
→ 键入指令 n3 (在 Save Names In List 的 Name 处) → OK
(3)Data
→ Bank → Index → 键入指令 niaq:cp*96.q (在 Name(s) or Wildcard
处)
→ 键入指令 listf n4(在 Save Names In List 的 Name 处) → OK
(4)Data
→ Bank → Display → 键入指令 n3 (在 Name 处) → OK
(5)键入指令
view
n4.lst;
(6)键入指令
set
freq q;
(7)键入指令
copy
#n3;
(8)Data
→ Bank → Index → 键入指令 work:*,*(在 Name(s) or Wildcard 处)
→ 键入 n5 (在 Save Names In List 的 Name 处) → OK
(9)Data
→ Bank → Index → 选 series(在 Type 处) → 键入 work:*.* (在
Name(s)
or Wildcard 处) → 键入指令 n6 (在 Save Names In List 的 Name 处) →
OK
说明:
(2):此操作一方面做 index 查询,同时把所找到的 object
names 形成一个 list 叫 n3,内含 3 个 names。
(3):此操作一方面做 index 查询,同时把所找到的 object
names 形成 C 碟上 <WAREM32> 子目录下的一个 list file,叫
n4.lst,内含 13 个 names。(操作方法,如图 7.2.3 )
【图
7.2.3】
(4)(5):见
7.1 节之说明。
(6)(7):第
(7) 式把 n3 所代表的 3 个 objects 从 niaq 数据库拷到 primary bank。但从执行第
(4) 式 display 指令可看出一个 list 所含 object names 并无
version name。因此要先 set
freq q,与所要 copy 的数据频率相同,否则会得到 error
message。换句话说,copy #n3 相当于 copy gnp, gnp96, gnpexp96。而在
set
freq q 下,则相当于 copy gnp.q, gnp96.q, gnpexp96.q。
(8):此操作
index
work bank 上所有 objects,含 3 个 copy 过来的 series 以及执行 (2)
式所形成的 list n3,并把这些
object names
形成一个l ist 叫 n5。
(9):此操作
index
work bank 所有属于 serie s的 objects,在此即是 copy 过来的 3
个 series,而把这些 series
names 形成一个 list 叫 n6。Index objecttype 乃限定某类 object
做 index,否则会 index 所有 objects。(操作如图 7.2.9 )
【图
7.2.9】
注:用
Index
Bank Objects 方式做成的 List 是有限制 objects 数目,若数据库里的笔数很多皆想做成
1 个 List,需要修改 AREMOS 系统里的设定:Options
→ Set → Databanks…→ 键入 4000 (在 Limit Number of items Found
to) → OK 。
【图
7.2.10】
<回页首>
7.3
使用 Set Operator
来产生
list
如果
primary bank 里已建有一些 lists,或 C 碟上已建有一些 list
files,我们可利用 union(+),difference(-),intersection(*),concatenation(,)等
set
operators 来产生新的 list 或 list file。假定 primary bank 里已有
n1,n2 两个 lists,而 C 碟上有 m1.lst,m2.lst 两个 list files。则:
(1)键入指令
list n3=#n1+#n2;
(2)键入指令
list n4=#n1-#n2;
(3)键入指令
list n5=#n1*#n2;
(4)键入指令
list n6=#n1,#n2;
说明:
(1):此指令展生新的 list n3,是 n1 与 n2 的 union。在其他操作方法上,也可使用鼠标,Data
→ List → OK进去修改如图 7.3.1。
【图7.3.1】
(2):n4 是 n1 去掉与 n2 有相同 names。
(3):n5 是 n1 与 n2 的 intersection (交集)。
(4):n6 与 n3 的差别在于,如果 n1 与 n2 有重复,则 n3 只取一个,而
n6 会重复放进去。
此外,我们亦可:
(5):键入指令 list m3=#(listf m1)+#(listf m2);
(6):键入指令 list listf m4=#(listf m1)+#(listf m2);
(7):键入指令 list k1=#n1[1-200];
(8):键入指令 list k2=#n1[201-266];
说明:
(5):在
primary
bank 里产生一个 list 叫 m3,其内容是
listf m1 与
listf
m2 的
uinon。
(6):在
C 碟 <warem32> 子目录上产生一个 listf
叫 m4.lst,其内容也是 m1 与 m2 的 union。
(7)(8):假若
list
n1 里的笔数 (objects) 超过 200 笔以上,则必须分割,在此分割成
k1,
k2两个 list。
<回页首> <回「入门讲义」>
|