第七章 LIST

<回「入門講義」>

List 是 AREMOS/Windows 語言堳雂隢K而強有力的工具。簡單說,一個 list 是「a collection of names」,代表一群 objects。如果要反覆對某一群 objects 做操作,我們可先產生一個 list 來代表這群 objects。只要對這個 list 做操作,就相當於對那群 objects 做操作。同時 list 本身也是一種 (type) object,可存在 bank 堙F或也可以 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 堙C

    注意:您可直接鍵入指令,也可用滑鼠操作,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 堳O存起來。注意: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 堣w建有一些 lists,或 C 碟上已建有一些 list files,我們可利用 union(+),difference(-),intersection(*),concatenation(,)等 set operators 來產生新的 list 或 list file。假定 primary bank 堣w有 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 m1listf m2uinon

(6)在 C 碟 <warem32> 子目錄上產生一個 listf 叫 m4.lst,其內容也是 m1 與 m2 的 union。

(7)(8):假若 list n1 裡的筆數 (objects) 超過 200 筆以上,則必須分割,在此分割成 k1, k2兩個 list。

 <回頁首>

<回「入門講義」>