11 檔案處理

在第六章中已介紹過檔案處理, 處理的檔案都是循序檔(sequential files), 即檔案中每一記錄 都是循序寫入的, 而且也必須循序讀出。 這表示要在循序檔中讀出一特定記錄, 之前所有記錄必須先讀出。 另一種檔案稱為直接接達檔(direct-access files), 檔案中每一記錄可以直接讀寫, 通常是經由記錄號碼。 直接接達檔中所有記錄, 其長度必須相同, 而且不能更動。 循序檔中的記錄長度可 以變動。

檔案也可分成有格式無格式兩種。 目前提及的檔案都是有格式的。 有格式的檔案中記錄所含資訊是用外顯字元的形式表示, 而無格式的檔案中記錄則是用 二進形式表示。 因此無格式的檔案中記錄的確實形式, 隨機器而有所不同。

11.1 OPEN, CLOSE, 和 INQUIRE 敘述

開檔

在第六章中提及, 在使用檔案輸入或輸出之前,檔案必須先標明所用的單位規定式號碼。 OPEN 敘述的一般形式為

       OPEN ( open-list )

其中 open-list

    必須包括

  1. 單位規定式


  2. 大多也包括

  3. FILE = 子句,列出檔案名稱
  4. STATUS =子句,規定檔案的新舊。


  5. 也可包括選自下列的其他規定式:

  6. IOSTAT =子句,指示檔案是否順利打開。
  7. ERR =子句,規定若在開檔發生錯誤時,所要執行檔案的號碼。
  8. ACCESS =子句,規定檔案是循序或直接。
  9. FORM =子句,規定檔案是有格式或無格式的。
  10. RECL =子句,規定直接接達檔的記錄長度。
  11. BLANK =子句,規定數值欄中的空白是當做 0 或是略過。

單位規定式

單位規定式的形式為,
      UNIT = integer-expinteger-exp
其中 integer-exp 的數值是零或正整數, 指定檔案的單位號碼。 READ 或 WRITE 敘述使用此單位號碼讀寫其連接的檔案。 使用第二種形式時, integer-exp必須是open-list的第一項。

FILE = 子句

FILE = 子句的形式為,
      FILE = char-exp

其中 char-exp (略去末尾的空白)是單位號碼所連接的檔案名稱。

STATUS = 子句

STATUS = 子句的形式為,
      STATUS = char-exp

其中 char-exp (略去末尾的空白) 之值是下列之一:
      OLD     舊檔, 必須用 FILE = 子句規定檔名。
      NEW     新檔, 必須用 FILE = 子句規定檔名。
      SCRATCH 草稿檔, 必須不用檔名。
      UNKNOWN 未知檔, 以上皆非。 若省略 STATUS = 子句, 則預設為未知檔。

IOSTAT = 子句

FILE = 子句的形式為,
      IOSTAT = int-var

其中 int-var 之值為零或正整數。 開檔順利, 則為零。 否則為正整數, 代表系統手冊中的錯誤信文之號碼。

ERR = 子句

ERR = 子句的形式為,
      ERR = n

其中 n 規定若在開檔發生錯誤時,所要執行檔案的號碼。

ACCESS = 子句

ACCESS = 子句的形式為,
      ACCESS = char-exp

其中 char-exp (略去末尾的空白) 之值是下列之一:
      SEQUENTIAL  規定檔案是循序
      DIRECT      規定檔案是直接

若省略此子句, 則預設為循序檔。

FORM = 子句

FORM = 子句的形式為,
      FORM = char-exp

其中 char-exp (略去末尾的空白) 之值是下列之一:
      FORMATTED     規定檔案是有格式的
      UNFORMATTED   規定檔案是無格式的

若省略此子句, 則循序檔預設為有格式的, 而直接檔預設為無格式的。

RECL = 子句

RECL = 子句的形式為,
      RECL = int-exp

其中 int-exp 之值為正。 此子句只在直接接達檔使用, 規定其記錄長度。 在有格式檔, 指的是 該檔每一記錄的字元數, 在無格式檔, 則視處理器(processor)而定。

BLANK = 子句

BLANK = 子句的形式為,
      BLANK = char-exp

其中 char-exp (略去末尾的空白) 之值是下列之一:
      ZERO   規定數值欄中的空白是當做 0。
      NULL   規定略過數值欄中的空白。

若數值欄中全是空白, 則不論 ZERO 或 NULL, 都當做 0。

關檔

CLOSE 敘述用以切斷檔案和單位號碼的連接。 CLOSE 敘述的一般形式為

       CLOSE ( close-list )

其中 close-list

    必須包括

  1. 單位規定式


  2. 也可包括選自下列的其他規定式:

  3. IOSTAT =子句,指示檔案是否順利關閉。
  4. ERR =子句,規定若在關檔發生錯誤時,所要執行檔案的號碼。
  5. STATUS =子句,規定檔案要保留或刪除。
STATUS = 子句的形式為,
      STATUS = char-exp

其中 char-exp (略去末尾的空白) 之值是下列之一:
      KEEP     規定關檔後保留該檔。
      DELETE   規定關檔後刪除該檔。

SCRATCH 檔不可用 KEEP。 若省略 STATUS = 子句, 則刪除草稿檔, 保 留其他類型的檔案。

檔案用CLOSE 敘述關閉後, 可以再用OPEN敘述打開, 可用同一單位號碼, 也可用不同的 號碼。 所有未關閉的檔案, 在程式終止執行時(由於發生錯誤而導致的不正常終止除外), 都自動關閉。

INQUIRE 敘述

INQUIRE 敘述用以探查檔案或其單位號碼的性質, 其一般形式為

       INQUIRE ( inquiry-list )

其中 inquiry-list 必須包括單位規定式或檔案規定式(但不可都用), 也可包括 IOSTAT = 或 ERR = 子句。 此外尚可包括許多其他子句。

11.2 檔案輸入/輸出和定位

例題
  1. Direct Access -- INVEN (source)
  2. Merging files -- MERGE (source)