第七章 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;
             此时可键入指令「stop;」出来,或File → disconnect 出来,稍后再进入 AREMOS:

(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。
           其一般句型是:
            copy objecttype objectname;
           但如何所要 copy 的是 series,则 objecttype (即 series)不需打出来。否则必须打 objecttype (在此为 list )。当然,如果您用鼠标操作,则是:
            Data → Bank → Copy → 键入 list n1 (在 Name or Wildcard 处) → OK

(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。

 <回页首>

<回「入门讲义」>