# OpenVMS
ユーザーズ・マニュアル

前へ | 次へ | 目次 | 索引

# 14.6 文字列

文字列には，印刷可能な文字が入ります。 付録 B に，文字列に指定できる ASCII 文字セットと DEC Multinational 文字セットの表があります。これらの表は文字列に含むことのできる文字を示しています。

文字は，次の 3 つに分類されます。

- 英数字

  A 〜 Z の大文字，a 〜 z の小文字，1 〜 9 の数字，ドル記号 ($)，アンダスコア (_)，ハイフン (-)。

- 特殊文字

  表示や印刷が可能な上記以外の文字。感嘆符 (!)，引用符 (")，番号記号 (#) など。

- 印刷不可能な文字

  表示や印刷ができないすべての文字。一般に，印刷不可能な文字は表示や印刷のときには無視されますが，いくつかの印刷不可能な文字は，次のような制御機能を持ちます。

  文字 | 機能
  --- | ---
  HT | 次の水平タブで印刷や入力を開始する
  LF | 次の行で印刷や入力を開始する
  FF | 次のページの冒頭で印刷や入力を開始する
  CR | 同一行の最初のスペースで印刷や入力を開始する
  ESC | ターミナル・エスケープ・シーケンスの開始を示す
  SP | スペースを 1 つ挿入する

注意 Extended File Specifications の環境で作業をしている場合は，リッチ・テキスト文字セットと他の使用可能なオプションについては，『OpenVMS Extended File Specifications の手引き』を参照してください。

## 14.6.1 文字列の定義

文字列を引用符 (" ") で囲めば，文字列を定義できます。シンボル割り当てを行ったときの英字の大文字/小文字とスペースは，この方法で残します。次の点に注意してください。

- 文字列の中に引用符 (") を指定するには，引用符を 2 つ連続して入力する。

- 文字列が 2 行にわたる場合には，プラス記号 (文字列の連結) とハイフン (継続) を使用する。
  引用符で囲まれた文字列の中では，ハイフン継続文字は使用できない。

次の例では，文字列 "YES" が引用符で囲まれます。したがって，引用符の内部で定義しなければなりません。

    $ PROMPT = "Type ""YES"" or ""NO"""
    $ SHOW SYMBOL PROMPT
      PROMPT = "Type "YES" or "NO""

次の例では，文字列が 2 行に継続されます。

    $ HEAD = "MONTHLY REPORT FOR" + -
    _$ " DECEMBER 1998"
    $ SHOW SYMBOL HEAD
      HEAD = "MONTHLY REPORT FOR DECEMBER 1998"

## 14.6.2 文字列式

文字列式には，文字列，文字列として評価されるレキシカル関数，文字列値を持つシンボルが入ります。式の中で文字列を使用する場合には，文字列を引用符 (" ") で囲まなければなりません。引用符を使用しないと，文字列はシンボルとして処理されます。

文字列式は，次の値 (「文字列オペランド」と呼びます) を組み合わせます。

- 引用符で囲まれた文字列

- 文字列を表すシンボル

- 文字列として評価されるレキシカル関数

文字列と数値との間で演算や比較を実行すると， DCL はその文字列を数値に変換します。

文字列オペランドは，後述するように，加算 (文字列連結)，減算 (文字列削減)，比較，他の文字列との置換を行うことができます。

次の例では，文字列 "CAT" は引用符で囲まなければなりません。

    $  TEMP = "CAT"

次の例では，TEMP シンボルは文字列 "CAT" を表しています。 TOPIC シンボルは，文字列 "THE" と TEMP シンボルが表す文字列 ("CAT") を連結します。結果は "THE CAT" となります。

    $  TOPIC = "THE" + TEMP

次の例では，シンボル COUNT はレキシカル関数 F$STRING(65) を表します。

    $  COUNT = F$STRING(65)

## 14.6.3 文字列の操作

次のような文字列操作を指定できます。

- 連結

  プラス記号は， 2 つの文字列を連結します。

- 削減

  マイナス記号は，最初の文字列から 2 番目の文字列を削除します。
  2 番目の文字列が最初の文字列の中で 2 回以上生じている場合には，最初の文字列だけが削除されます。

次の例では，プラス記号 (+) を使用して，2 つの文字列を連結します。

    $ COLOR = "light brown"
    $ WEIGHT = "30 lbs."
    $ DOG2 = "No tag, " + COLOR + ", " + WEIGHT
    $ SHOW SYMBOL DOG2
      DOG2 = "No tag, light brown, 30 lbs."

次の例では，マイナス記号 ( - ) を使用して，文字列を削除します。

    $ SHOW SYMBOL DOG2
      DOG2 = "No tag, light brown, 30 lbs."
    $ DOG2 = DOG2 - ", 30 lbs."
    $ SHOW SYMBOL DOG2
      DOG2 = "No tag, light brown"

## 14.6.4 文字列の比較

2 つの文字列を比較する場合，文字列は文字ごとに比較されます。長さの異なる文字列は等しくありません (たとえば，"dogs" は"dog" より大きいとみなされます)。

比較の際の基準となるのは，文字の ASCII 値です。この基準のもとでは，0 〜 9 の数字は A 〜 Z の英字より小さく， A 〜 Z の大文字は a 〜 z の小文字より小さくなります。次のいずれかの条件が真になると，文字列比較は終了します。

- すべての文字の比較が終了した。この場合，文字はすべて等しいとみなされる。

- 一致しない最初の文字を検出した。

表 14-1 に様々な文字列比較のタイプを示します。

表 14-1 文字列比較
比較 | 演算子 | 説明
--- | --- | ---
等しい | .EQS. | 文字列と文字列を比較して，等しいかどうかを判定する。
より大きい，または等しい | .GES. | 文字列と文字列を比較して，最初に指定された文字列の値が 2 番目の文字列の値より大きいかまたは等しいかを判定する。
より大きい | .GTS. | 文字列と文字列を比較して，最初に指定された文字列の値が 2 番目の文字列の値より大きいかどうかを判定する。
より小さい，または等しい | .LES. | 文字列と文字列を比較して，最初に指定された文字列の値が 2 番目の文字列の値より小さいかまたは等しいかを判定する。
より小さい | .LTS. | 文字列と文字列を比較して，最初に指定された文字列の値が 2 番目の文字列の値より小さいかどうかを判定する。
等しくない | .NES. | 1 つの文字列を別の文字列と比較して，等しくないかどうかを判定する。

これらの例の中では，LAST_NAME シンボルが "WHITFIELD" の値を持つものとします。

- 次の例では，LANT_NAME シンボルの値は "HILL" というリテラルに等しくないため，0 (偽) が戻されます。

      $ TEST_NAME = LAST_NAME .EQS. "Hill"
      $ SHOW SYMBOL TEST_NAME
        TEST_NAME = 0   ...

- 次の例では，LAST_NAME シンボルの値が "HILL" というリテラルより大きいか，または等しいため，1 (真) が戻されます。

      $ TEST_NAME = LAST_NAME .GES. "HILL"
      $ SHOW SYMBOL TEST_NAME
        TEST_NAME = 1   ...

- 次の例では，LAST_NAME シンボルの値が "HILL" というリテラルより大きいため， 1 (真) が戻されます。

      $ TEST_NAME = LAST_NAME .GTS. "HILL"
      $ SHOW SYMBOL TEST_NAME
        TEST_NAME = 1   ...

- 次の例では，LAST_NAME シンボルの値が "HILL" というリテラルより大きいため， 0 (偽) が戻される。

      $ TEST_NAME = LAST_NAME .LES. "HILL"
      $ SHOW SYMBOL TEST_NAME
        TEST_NAME = 0   ...

- 次の例では，LAST_NAME シンボルの値が "HILL" というリテラルより小さくないため，0 (偽) が戻される。

      $ TEST_NAME = LAST_NAME .LTS. "HILL"
      $ SHOW SYMBOL TEST_NAME
        TEST_NAME = 0   ...

- 次の例では，LAST_NAME シンボルの値が "HILL" というリテラルに等しくないため，1 (真) が戻される。

      $ TEST_NAME = LAST_NAME .NES. "HILL"
      $ SHOW SYMBOL TEST_NAME
        TEST_NAME = 1   ...

## 14.6.5 部分文字列の置換

置換文字列の位置とサイズを指定すると，文字列の一部だけを別の文字列に置き換えることができます。この場合の形式は次のとおりです。

ローカル・シンボルの場合は，

    シンボル名[オフセット,サイズ] := 置換文字列

グローバル・シンボルの場合は，

    シンボル名[オフセット,サイズ] :== 置換文字列

各要素は次のとおりです。

オフセット | 元の文字列の最初の文字を基準として置換文字列の位置を示す整数である。オフセット 0 はシンボルの最初の文字を意味し，オフセット1 は 2 番目の文字を意味する。
サイズ | 置換文字列の長さを示す整数である。

部分文字列を置換する場合には，次の規則に従います。

- 大括弧 [ ] は必ず指定しなければならない。シンボル名と左大括弧の間にはスペースはいれない。

- サイズとオフセットには，0 〜 768 の範囲の整数値を指定する。

- 置換文字列は文字列でなければならない。

- 指定するシンボル名は，最初は未定義でもかまわない。割り当て文でシンボル名を作成し，必要であれば，シンボル値の前または後にスペースを挿入する。

- オフセットとサイズを指定すれば，ブランク行を表すシンボルを作成することもできる。

レコードを一列に並べれば，リストが読みやすくなり，ソートしやすくなります。この形式を使用して，データの格納方法を指定できます。

次の例では，最初の割り当て文は A というシンボルに PACKRAT の値を割り当てています。2 番目の割り当て文は，MUSK を A の値の中の最初の 4 文字に置き換えることを指定しています。この結果，A の値は MUSKRAT になります。

    $ A := PACKRAT
    $ A[0,4] := MUSK
    $ SHOW SYMBOL A
       A = "MUSKRAT"

次の例では，シンボル B が以前に値を持っていない場合には， 4 つのスペースの後に RAT を付けた値が与えられます。

    $ B[4,3] := RAT

次の例では，80 個のブランクからなる値を LINE シンボルに割り当てています。

    $ LINE[0,80]:= " "

次の例では，最初の文は，DATA の最初の 15 桁に NAME の値を埋め込みます。 2 番目の文は，18 桁目に GRADE の値を埋め込みます。 16 桁目と 17 桁目はブランクになります。

    $ DATA[0,15] := 'NAME'
    $ DATA[17,1] := 'GRADE'

# 14.7 数値と式の使用方法

数値は次のいずれかの値になります。

- 10 進数 - 0 〜 9 の ASCII 文字

- 16 進数 - 0 〜 9 と A 〜 F の ASCII 文字

- 8 進数 - 0 〜 7 の ASCII 文字

シンボルに割り当てる数値は， -2147483648 〜 2147483647 (10 進数) の範囲でなければなりません。この範囲にない数値を指定した場合や，この範囲にない数値が計算で得られた場合には，エラーは報告されませんが，結果は間違った値になります。

## 14.7.1 数値の指定

DCL コマンド・レベルとコマンド・プロシージャの中では，数値は次のように指定します。

- 正の整数

  正の整数は，該当する数字を入力することによって指定します。

- 負の整数

  負の整数には前にマイナス記号 (-) を付けます。

- 基数

  10 進数以外の基数を指定するには，16 進数の場合には %X を， 8 進数の場合には %0 を数値の前 (ただし，マイナス記号の後) に付けます。

- 小数

  数値には小数点を含めることができません。計算のときには，小数点は切り捨てられます。たとえば，8 を 3 で除算すると 2 になります。

次の例では，13 という数値を DOG_COUNT というシンボルに割り当てています。

    $ DOG_COUNT = 13
    $ SHOW SYMBOL DOG_COUNT
      DOG_COUNT = 13   Hex = 0000000D  Octal = 00000000015

次の例では，負の値 ( -15237 ) がマイナス記号 ( - ) によって表現されます。

    $ BALANCE = -15237
    $ SHOW SYMBOL BALANCE
      BALANCE = -15237   Hex = FFFFC47B  Octal = 37777742173

次の例では，16 進数 D が %X という接頭語によって表現されます。

    $ DOG_COUNT = %XD
    $ SHOW SYMBOL DOG_COUNT
      DOG_COUNT = 13   Hex = 0000000D  Octal = 00000000015
    $ BALANCE = -%X3B85
    $ SHOW SYMBOL BALANCE
      BALANCE = -15237   Hex = FFFFC47B  Octal = 37777742173

## 14.7.2 数値の内部記憶

数値は，内部的には符号付きの 4 バイト整数，すなわちロングワードとして格納されます。正の整数は 0 〜 2147483647 の値に，負の整数は 4294967296 から数値の絶対値を引いた値になります。たとえば，-15237 という数値は 4294952059 として格納されます。負の整数は，ASCII や 10 進数で表示する場合には，マイナス記号形式に変換されますが， 16 進数や 8 進数で表示する場合には，マイナス記号形式には変換されません。たとえば，-15237 という数値は，16 進数の -00003B85 ではなく， 16 進数の FFFFC47B (10 進数 4294952059) として表示されます。

数値は，ASCII 表記規則を使用して一連の数字としてテキスト・ファイルに格納されます (たとえば，数値の 1 は 49 として格納されます)。

数値式 では，値はリテラル数 (3 など) または数値を持つシンボルでなければなりません。また，数値を表す文字列 (たとえば，"23" または "--51") を使用できます。数値と文字列の間で演算を行ったり比較したりする場合，文字列は数値に変換されます。

数値式は，次の値 (整数オペランドと呼ばれます) を組み合わせます。

- 整数。たとえば，

      $  COUNT = 1

- 整数として評価されるレキシカル関数。たとえば，

      $  B = F$INTEGER("-9" + 23)

- 整数値を持つシンボル。たとえば，

      $  A = B - 6

  前の例では，B というシンボルは F$INTEGER 関数 (-923) によって戻された整数値を表します。

このような整数オペランドは，後述するように，算術演算子，論理演算子，比較演算子によって接続できます。

## 14.7.3 算術演算

次のような算術演算を指定できます。

- 乗算

  アスタリスク (*) は，2 つの数値を乗算します。

- 除算

  スラッシュ (/) は，最初に指定された数値を 2 番目に指定された数値で除算します。数値が割り切れない場合には，余りは切り捨てられ，四捨五入は行われません。

- 加算

  プラス記号 (+) は，2 つの数値を加算します。

- 減算

  マイナス記号 (-) は，最初に指定された数値から 2 番目に指定された数値を減算します。

- 単項プラスと単項マイナス

  プラス記号とマイナス記号は，後に続く数値の符号を変更します。

例

- 次の例では，シンボルを割り当てるときに，乗算を使用する方法を示しています。

      $ BALANCE = 142 * 14
      $ SHOW SYMBOL BALANCE
        BALANCE = 1988   Hex = 000007C4  Octal = 00000003704

- 次の例では，シンボルを割り当てるときに，除算を使用する方法を示しています。

      $ BALANCE = BALANCE / 14
      $ SHOW SYMBOL BALANCE
        BALANCE = 142   Hex = 0000008E  Octal = 00000000216

- 次の例では，シンボルを割り当てるときに，加算を使用する方法を示しています。

      $ BALANCE = BALANCE + 37
      $ SHOW SYMBOL BALANCE
        BALANCE = 179   Hex = 000000B3  Octal = 00000000263

- 次の例では，シンボルを割り当てるときに，減算を使用する方法を示しています。

      $ BALANCE = BALANCE - 15416
      $ SHOW SYMBOL BALANCE
        BALANCE = -15237   Hex = FFFFC47B  Octal = 00000142173

- 次の例では，単項マイナスを使用して，数値 -142 の符号を変更する方法を示しています。

      $ BALANCE = -(- a142)
      $ SHOW SYMBOL BALANCE
        BALANCE = 142   Hex = 0000008E   Octal = 00000000216

前へ | 次へ | 目次 | 索引