前へ | 次へ | 目次 | 索引 |
シンボルは,コマンド・プロシージャの中の変数として使用できます。変数には,リテラル値以外のものとして計算したり割り当てたりする値が入ります。たとえば,レキシカル関数の値を変数に割り当てたり,ファイル・レコードの値を変数に読み込んだりすることができます。
式 は,値が組み合わされたものです。コマンド・プロシージャの中では,式は,シンボル割り当て文(等号の右辺),IF 文,WRITE コマンドの中で,あるいはレキシカル関数の引数として使用されます。
シンボル定義では,割り当て文の左辺がシンボル名,右辺が式になります。式の中のそれぞれの値(オペランド とも呼びます)は,演算子 によって別の値に接続できます。DCL は式を評価して,その結果をシンボルに割り当てます。式が文字列として評価された場合は,シンボルは文字列値を持ちます。
次の例では,ローカル・シンボル BARK が,3 つの数値を加算する式として定義されています。
$ BARK = 1 + 2 + 3 |
オペランドは 1,2,および 3 です。演算子はプラス記号(+)です。前の例では,評価された式が整数なので,シンボルは整数値を持ちます。
12.6 文字列
文字列には,印刷可能な文字が入ります。 付録 A に,文字列に指定できる ASCII 文字セットと DEC Multinational 文字セットの表があります。これらの表は文字列に含むことのできる文字を示しています。
文字は,次の 3 つに分類されます。
A 〜 Z の大文字,a 〜 z の小文字,1 〜 9 の数字,ドル記号($),アンダスコア(_),ハイフン(-)。
表示や印刷が可能な上記以外の文字。感嘆符(!),引用符("),番号記号(#)など。
表示や印刷ができないすべての文字。一般に,印刷不可能な文字は表示や印刷のときには無視されますが,いくつかの印刷不可能な文字は,次のような制御機能を持ちます。
文字 | 機能 |
---|---|
HT | 次の水平タブで印刷や入力を開始する |
LF | 次の行で印刷や入力を開始する |
FF | 次のページの冒頭で印刷や入力を開始する |
CR | 同一行の最初のスペースで印刷や入力を開始する |
ESC | ターミナル・エスケープ・シーケンスの開始を示す |
SP | スペースを 1 つ挿入する |
文字列を引用符(" ")で囲めば,文字列を定義できます。シンボル割り当てを行ったときの英字の大文字/小文字とスペースは,この方法で残します。次の点に注意してください。
引用符で囲まれた文字列の中では,ハイフン継続文字は使用できない。
次の例では,文字列 "YES" が引用符で囲まれます。したがって,引用符の内部で定義しなければなりません。
$ PROMPT = "Type ""YES"" or ""NO""" $ SHOW SYMBOL PROMPT PROMPT = "Type "YES" or "NO"" |
次の例では,文字列が 2 行に継続されます。
$ HEAD = "MONTHLY REPORT FOR" + - _$ " DECEMBER 1999" $ SHOW SYMBOL HEAD HEAD = "MONTHLY REPORT FOR DECEMBER 1999" |
文字列式には,文字列,文字列として評価されるレキシカル関数,文字列値を持つシンボルが入ります。式の中で文字列を使用する場合には,文字列を引用符(" ")で囲まなければなりません。引用符を使用しないと,文字列はシンボルとして処理されます。
文字列式は,次の値(「文字列オペランド」と呼びます)を組み合わせます。
文字列と数値との間で演算や比較を実行すると,DCL はその文字列を数値に変換します。
文字列オペランドは,後述するように,加算(文字列連結),減算(文字列削減),比較,他の文字列との置換を行うことができます。
次の例では,文字列 "CAT" は引用符で囲まなければなりません。
$ TEMP = "CAT" |
次の例では,TEMP シンボルは文字列 "CAT" を表しています。TOPIC シンボルは,文字列 "THE" と TEMP シンボルが表す文字列("CAT")を連結します。結果は "THE CAT" となります。
$ TOPIC = "THE" + TEMP |
次の例では,シンボル COUNT はレキシカル関数 F$STRING(65)を表します。
$ COUNT = F$STRING(65) |
次のような文字列操作を指定できます。
プラス記号は,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" |
2 つの文字列を比較する場合,文字列は文字ごとに比較されます。長さの異なる文字列は等しくありません(たとえば,"dogs" は"dog" より大きいとみなされます)。
比較の際の基準となるのは,文字の ASCII 値です。この基準のもとでは,0 〜 9 の数字は A 〜 Z の英字より小さく,A 〜 Z の大文字は a 〜 z の小文字より小さくなります。次のいずれかの条件が真になると,文字列比較は終了します。
表 12-1 に様々な文字列比較のタイプを示します。
比較 | 演算子 | 説明 |
---|---|---|
等しい | .EQS. | 文字列と文字列を比較して,等しいかどうかを判定する。 |
より大きい,または等しい | .GES. | 文字列と文字列を比較して,最初に指定された文字列の値が 2 番目の文字列の値より大きいかまたは等しいかを判定する。 |
より大きい | .GTS. | 文字列と文字列を比較して,最初に指定された文字列の値が 2 番目の文字列の値より大きいかどうかを判定する。 |
より小さい,または等しい | .LES. | 文字列と文字列を比較して,最初に指定された文字列の値が 2 番目の文字列の値より小さいかまたは等しいかを判定する。 |
より小さい | .LTS. | 文字列と文字列を比較して,最初に指定された文字列の値が 2 番目の文字列の値より小さいかどうかを判定する。 |
等しくない | .NES. | 1 つの文字列を別の文字列と比較して,等しくないかどうかを判定する。 |
これらの例の中では,LAST_NAME シンボルが "WHITFIELD" の値を持つものとします。
$ TEST_NAME = LAST_NAME .EQS. "Hill" $ SHOW SYMBOL TEST_NAME TEST_NAME = 0 ... |
$ TEST_NAME = LAST_NAME .GES. "HILL" $ SHOW SYMBOL TEST_NAME TEST_NAME = 1 ... |
$ TEST_NAME = LAST_NAME .GTS. "HILL" $ SHOW SYMBOL TEST_NAME TEST_NAME = 1 ... |
$ TEST_NAME = LAST_NAME .LES. "HILL" $ SHOW SYMBOL TEST_NAME TEST_NAME = 0 ... |
$ TEST_NAME = LAST_NAME .LTS. "HILL" $ SHOW SYMBOL TEST_NAME TEST_NAME = 0 ... |
$ TEST_NAME = LAST_NAME .NES. "HILL" $ SHOW SYMBOL TEST_NAME TEST_NAME = 1 ... |
置換文字列の位置とサイズを指定すると,文字列の一部だけを別の文字列に置き換えることができます。この場合の形式は次のとおりです。
ローカル・シンボルの場合は,
シンボル名[オフセット,サイズ] := 置換文字列 |
グローバル・シンボルの場合は,
シンボル名[オフセット,サイズ] :== 置換文字列 |
各要素は次のとおりです。
オフセット | 元の文字列の最初の文字を基準として置換文字列の位置を示す整数である。オフセット 0 はシンボルの最初の文字を意味し,オフセット1 は 2 番目の文字を意味する。 |
サイズ | 置換文字列の長さを示す整数である。 |
部分文字列を置換する場合には,次の規則に従います。
レコードを一列に並べれば,リストが読みやすくなり,ソートしやすくなります。この形式を使用して,データの格納方法を指定できます。
次の例では,最初の割り当て文は 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' |
数値は次のいずれかの値になります。
シンボルに割り当てる数値は,-2147483648 〜 2147483647(10 進数)の範囲でなければなりません。この範囲にない数値を指定した場合や,この範囲にない数値が計算で得られた場合には,エラーは報告されませんが,結果は間違った値になります。
12.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 |
数値は,内部的には符号付きの 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)によって戻された整数値を表します。
このような整数オペランドは,後述するように,算術演算子,論理演算子,比較演算子によって接続できます。
前へ | 次へ | 目次 | 索引 |