第七章 LIST


  List 是 AREMOS 語 言 �� 很 方 便 而 強 有 力 的 工 具 。 簡 單 說 , 一 個 list 是 「a collection of names」 , 代 表 一 群 objects 。 如 果 要 反 覆 對 某 一 群 objects 做 操 作 , 我 們 可 先 產 生 一 個 list 來 代 表 這 群 objects 。 只 要 對 這 個 list 做 操 作 , 就 相 當 於 對 那 群 objects 做 操 作 。 同 時 list 本 身 也 是 一 種 (type) object , 可 存 在 bank �� ; 或 也 可 以 home 子 目 錄 下 的 一 個 file 來 保 存 , 隨 時 取 用 。

  本 章 介 紹 三 種 不 同 的 方 法 產 生 list。

7.1 使用 list 指令來產生 list

  最 簡 單 產 生 list 的 方 法 是 使 用 典 型 的 object command , 即 以 list 指 令 來 產 生 一 個 list 。 看 下 面 範 例 說 明:

  (1) list n1=gdp,cp,gdp96;
  (2) list listf n2=gnp,gnp96;
  (3) set freq q; set per 85:1 86:4; open niaq;
  (4) print #n1;
  (5) print #(listf n2);
  (6) display n1;
  (7) view n2.lst;
  (8) vii "n2.lst";
  (9) 按大寫 Z 兩次
  (10) open<pri>mybank;
  (11) copy list n1;

此 時 可 「stop;」 出 來 , 稍 後 再 進 入 AREMOS:

  (12) open mybank;
  (13) copy list n1;

說 明:

  (1) :在 第 六 章 6.1 節 曾 介 紹 產 生 object 的 object command 一 般 型 式 是 :

objecttype objectname=definition;

在 此 乃 是 以 list 指 令 (objecttype) 產 生 一 個 list , 名 叫 n1 (objectname) , 而 n1 的 內 容 即 為 gdp,cp,gdp96 3 個 names 。 同 時 n1 本 身 是 一 個 object , 被 產 生 後 即 存 放 在 work bank �� 。

  (2) :此 指 令 可 產 生 另 一 個 list , 名 叫 n2 , 其 內 容 為 gnp,gnp96 2 個 names 。 但 在 list 指 令 後 面 如 果 加 上 listf (即 listfile 之 簡 稱) , 則 所 產 生 的 n2 並不 是 存 在 work bank �� 的 一 個 list , 而 是 存 在 home 子 目 錄 上 的 一 個 file (就 叫 做 list file), 其 filename 為 n2.lst。
  (4) :一 旦 產 生 n1 , 我 們 可 用 n1 來 替 代 它 所 代 表 的 3 個 objects 。 使 用 方 法 乃 在 前 面 加 「#」 符 號 。 在 此 , print #n1 相 當 於 print gdp,cp,gdp96 。 因 n1 只 含 3 個 objects , 尚 感 覺 不 出 list 的 威 力 。 如 果 n1 含 上 百 個 或 上 千 個 objects , 便 可 瞭 解 list 可 節 省 我 們 不 少 key in 的 人 力 時 間 。
  (5) :此 指 令 與 (4) 式 相 同 , 只 是 home 子 目 錄 上 的 list 前 面 總 要 加 listf 。 此 指 令 相 當 於 print gnp,gnp96。
  (6) :此 指 令 可 印 出 n1 所 代 表 的 3 個 names。
  (7) :範 例 (二) 已 介 紹 過 , view 指 令 可 查 看 home 子 目 錄 上 的 file 。
 (8)(9):可 使 用 vii 指 令 查 看 n2.lst file , 如 有 必 要 , 可 用 UNIX 之 vi 編 輯 指 令 來 增 加 或 減 少 n2 �� 的 names 。 要 跳 離 UNIX 之 vi 編 輯 畫 面 , 如 無 做 任 何 編 輯 指 令 , 可 按 兩 次 大 寫 Z 鍵 來 回 到 AREMOS 箭 頭 。 若 有 做 編 輯 指 令 , 則 先 按 ESC 鍵 , 再 按 兩 次 大 寫 Z 鍵 來 回 到 AREMOS 箭 頭 。 有 關 vi 編 輯 程 式 請 參 考 第 九 章 。
  (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)。

 (12)(13):將 來 再 進 入 AREMOS , 可 把 存 放 在 mybank �� 的 n1 隨 時 copy 出 來 使 用 。 不 過 , 如 以 listfile 型 式 保 留 在 home 子 目 錄 , 例 如 n2.lst , 則 隨 時 可 使 用 , 不 需 如 此 拷 來 拷 去 。

7.2 使用 index 指令來產生 list

  上 節 所 介 紹 以 list 指 令 產 生 list 方 法 , 乃 是 土 法 煉 鋼 , 把 names 逐 一 輸 入 。 現 在 介 紹 第 二 種 產 生 list 方 法 則 是 利 用 index 指 令 。 第 三 章 已 介 紹 過 , index 指 令 可 線 上 查 詢 已 open 的 banks 中 之 object , 尤 其 可 利 用 wildcard characters「*」 與 「?」 。 Index 指 令 下 完 後 , 如 果 最 後 面 再 加 上 一 個 list name (例 如 n3) , 則 電 腦 會 把 index 所 查 詢 到 的 所 有 object names 自 動 形 成 一 個 list , 而 以 該 指 定 的 list name (即 n3) 為 此 新 產 生 的 list 的 name 。 以 下 面 範 例 說 明:

  (1) open niaq;
  (2) index niaq:gnp*.q n3;
  (3) index niaq:cp*91.q listf n4;
  (4) display n3;
  (5) view n4.lst;
  (6) set freq q;
  (7) copy #n3;
  (8) index work: n5;
  (9) index series work: n6;

說 明:

  (2):此 指 令 一 方 面 做 index 查 詢 , 同 時 把 所 找 到 的 object names 形 成 一 個 list 叫 n3,內 含 3 個 names。
  (3):此 指 令 一 方 面 做 index 查 詢 , 同 時 把 所 找 到 的 object names 形 成 home 子 目 錄 上 一 個 listfile , 叫 n4.lst , 內 含 13 個 names。
 (4)(5):見 7.1 節 之 說 明。
 (6)(7):第 (7) 式 把 n3 所 代 表 的 3 個 objects 從 niaq 資 料 庫 拷 到 primary bank 。 但 從 執 行 第 (4) 式 display 指 令 可 看 出 一 個 list 所含 object names 並 無 versionname 。 因 此 要 先 set freq q , 與 所 要 copy 的 資 料 頻 率 相 同 , 否 則 會 得 到 error message。 換 句 話 說 , copy #n3 相 當 於 copy gnp,gnp96,gnpexp91 。 而 在 set freq q 下 , 則 相 當 於 copy gnp.q,gnp96.q,gnpexp91.q。
  (8):此 指 令 index work bank 上 所 有 objects , 含 3 個 copy 過 來 的 series 以 及 執 行 (2) 式 所 形 成 的 list n3 , 並 把 這 些 object names 形 成 一 個 list 叫 n5。
  (9):此 指 令 index work bank 所 有 屬 於 series 的 objects , 在 此 即 是 copy 過 來 的 3 個 series , 而 把 這 些 series names 形 成 一 個 list 叫 n6 。 Index objecttype 乃 限 定 某 類 object 做 index , 否 則 會 index 所 有 objects。

7.3 使用 Set Operator 來產生 list

  如 果 primary bank �� 已 建 有 一 些 lists , 或 home 子 目 錄 上 已 建 有 一 些 listfiles , 我 們 可 利 用 union (+) , difference (-) , intersection (*) , concatenation (,) 等 set operators 來 產 生 新 的 list 或 listfile 。 假 定 primary bank �� 已 有 n1 , n2 兩 個 lists , 而 home 子 目 錄 上 有 m1.lst , m2.lst 兩 個 listfiles 。 則:

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

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

說 明:

  (5) :在 primary bank �� 產 生 一 個 list 叫 m3 , 其 內 容 是 listfile m1 與 listfile m2 的 union。

  (6) :在 home 子 目 錄 下 產 生 一 個 listfile 叫 m4.lst , 其 內 容 也 是 m1 與 m2 的 union。

7.4 各個資料庫「表格 List」簡介

  「AREMOS 資 料 庫 系 統」 中 , 國 內 部 分 資 料 庫 我 們 大 都 建 有 一 些 現 成 的 lists 放 在 資 料 庫 中 可 供 使 用 。 這 些 lists 乃 依 該 資 料 庫 期 刊 上 表 格 來 建 的 。 每 一 個 list 含 期 刊 中 某 一 表 格 �� 所 有 資 料 之 檢 索 代 號 。

  例 如 IND 資 料 庫 中 有 一 個 list 叫 TA4@IND , 含 「台 灣 地 區 工 業 生 產 統 計 月 報」 中 表 A4 (Table A4) �� 所 有 資 料 之 檢 索 代 號 ; TC1@IND 則 含 表 C1 (Table C1) 之 檢 索 代 號 。 這 些 表 格 Lists 都 放 在 IND bank �� , 只 要 下 了 open ind 指 令 後 , 便 可 使 用 。

  每 個 資 料 庫 各 含 有 那 些 表 格 Lists , 列 舉 在 各 個 資 料 庫 檢 索 手 冊 之 附 錄 中 , 請 參 閱 。