10 進階字元資料

10.1 字元資料及其運算

字元型式

字元常數是括在一組單引號內的一串字元, 其長度即其字元數。 字元變數則用下列型式敘述宣告:

      CHARACTER*n, list

其中 list 為一組字元變數, n 即指每一變數含 n 個字元。 在 list 之前的 逗點可省略。 若省略 n, 則預設為 1。

例如:

      CHARACTER*10 STREET, CITY, STATE

宣告 STREET, CITY, 和 STATE 為長度 10 的字元變數。 各別變數的長度規定, 也可以變動, 只要在該變數的後面附加長度描述式 *m; 例如

      CHARACTER*10 STREET*20, CITY, STATE

宣告 STATE 和 CITY 長度為 10, 而 STREET 的長度為 20。 當在副程式的形式引數中用到字元型式時, 可以使用假設的長度規定式 * ,

      CHARACTER*(*) list

如此, 形式引數的長度將和實際引數相同。

字元運算

連接(concatenation)兩組字元資料可以用 // 連接。 例如,

      'CENTI' // 'METERS'

產生

      'CENTIMETERS'

次字串(substring) 另一常用的字串運算是從一字串取出一部分。 例如,
假設字元變數 UNITS 內含

      'CENTIMETERS'

則用 UNIT(4:7) 即可取出第4個到第7個字元的次字串 'TIME'。

次字串的起啟和終止位置, 可以使用整數常數,變數或陳式規定。 假如未註明起啟位置, 則假設為 1。 假如未註明終止位置, 則假設為該變數內含字串的最後位置。 例如, UNIT(:4) 之值為 'CENT', 而 UNIT(4:) 之值為 'TERS'。 注意起啟位置應為正, 而終止位置應大於起啟位置。

修改字串的一部分時, 可以引用次字串。 例如,

      UNIT(:5) = 'MICRO'

則 UNIT 的值變成 'MICROMETERS'。

輸出和輸入

字元資料的輸出和輸入, 可以使用串列式或格式化 I/O。 用法見第六章

10.2 INDEX 和 LEN 函數

INDEX

當抽取或修改次字串時, 往往要先找其在字串中的位置。 例如, 想在

      'ATOMIC WEIGHT OF KRYPTON'

中找 'WEIGHT' 的置, 可使用 FORTRAN 的庫存函數 INDEX :

      INDEX('ATOMIC WEIGHT OF KRYPTON', 'WEIGHT')

計算, 其值應為 8。

LEN

另一 FORTRAN 的庫存函數 LEN, 用以計算字串的長度。 例如,

      CHARACTER*20 NAME
      NAME = 'JOHN DOE'
            敘述                        結果
     --------------------------------------------
      PRINT *, LEN('JOHN DOE')    8
      PRINT *, LEN(NAME)          20
      N = LEN('MR. ' // NAME)     N 值為 24
      PRINT *, LEN(NAME(9:))      12
      DO 10 I = 1, LEN(NAME)      迴圈重覆 20 次
     --------------------------------------------
例題: EDITOR (source)

10.3 字元比較

第四章提及的比較運算子, 都可以字元或字串為運算元。 不過字元的比較是根據其數值碼的大小順序,即所謂對併順序(collating sequence)。 這種順序隨計算機而略有不同。

LLT, LLE, LGT, 和 LGE 函數

根據對併順序做比較時, 同一程式在不同的計算機上跑, 很可能產生不同的結果。 然而使用 LLT, LLE, LGT, 和 LGE 函數, 固定採用 ASCII 碼 的對併順序, 就不致發生這種問題。
ANSI FORTRAN 77 標準特別規定: 大寫字母 A 到 Z , 和數字 0 到 9 , 依照通常的次序。 字母和數字的數值碼不交叉。 空白必須在 A 和 0 之前。 然而並未規定特殊符號的次序。

例如,

      LLT('1', 'A')

為真。

ICHAR 和 CHAR 函數

每一字元在對併順序中的位置, 可用 ICHAR 函數取得。 用法如下:
      ICHAR(char)

char為以單一字元為值的陳式。

ICHAR 的反函數(inverse function) CHAR 用法如下:

      CHAR(integer)

此函數產生一字元, 在對併順序中的位置為 integer

例題: CODER (source)

FORTRAN 90 特色