前へ | 次へ | 目次 | 索引 |
文字列値に対してシンボル名を定義します。
シンボル名 :=[=] 文字列シンボル名[オフセット,サイズ] :=[=] 置換文字列
DCL コマンド名としてすでに使用されているシンボル名を割り当てないでください。 IF,THEN,ELSE,および GOTO のようなシンボルの割り当ては,コマンド・プロシージャの実行を妨げる可能性がありますので,行わないでください。 |
シンボル名
シンボル名に対して,文字から 255 文字までの文字列を定義します。シンボル名には,DEC 補助文字(DEC MCS) 文字セットの英数字,アンダースコア(_),またはドル記号($) を含めることができます。ただし,シンボル名は英字(大文字と小文字は同じとみなします),アンダースコア,またはドル記号から始めなければなりません。割り当て文に等号を 1 つ(=) 指定すると,シンボル名を現在のコマンド・レベルのローカル・シンボル・テーブルに登録します。割り当て文に等号 2 つ(==) を指定すると,シンボル名をグローバル・シンボル・テーブルに登録します。文字列
シンボルに割り当てられる文字列値を指定します。この文字列には,英数字または特殊文字を含めることができます。 DCL は,文字列割り当て文を記憶するために,1024 バイトのバッファを使用します。したがって,シンボル名,文字列,および文字列内に含まれるシンボル置換の長さは, 1024 文字以下でなければなりません。文字列割り当て文(:=) では,文字列リテラルを引用符(" ") で囲む必要はありません。この場合には,文字列値は自動的に大文字に変換されます。また,文字列の前後のスペースやタブは削除され,文字の間の複数のスペースやタブは1つのスペースに変換されます。
大文字への変換をしないようにしたり,または文字列に含まれる必要なスペースとタブをそのまま保存するには,文字列を二重引用符で囲まなければなりません。文字列の内部で二重引用符を使用する場合には,文字列全体を二重引用符で囲み,さらに文字列の中で二重引用符を指定する場所に二重引用符を 2 つ指定します。次の例を参照してください。
$ TEST := "this is a ""test"" string" $ SHOW SYMBOL TEST TEST = "this is a "test" string"
この例では,スペース,小文字,および二重引用符は,シンボル定義の中にそのまま保存されます。
シンボル割り当てを複数行に継続するには,継続文字としてハイフン(-)を使用します。次の例を参照してください。
$ LONG_STRING := THIS_SYMBOL_ASSIGNMENT_IS_A_VERY_LONG- _$ _SYMBOL_STRING
文字列割り当て文を使って,空文字列をシンボルに割り当てるためには,割り当て文の右辺に文字列を指定しないようにします。次の例を参照してください。
$ NULL :=
文字列は,文字列リテラルとして指定するか,または文字列リテラルに評価されるシンボルかレキシカル関数として指定します。シンボルやレキシカル関数を使用する場合には,シンボル置換を要求するために一重引用符(' ')で囲みます。シンボル置換についての詳細は,『Compaq OpenVMS ユーザーズ・マニュアル』を参照してください。
また,フォーリン・コマンドを定義するために,文字列割り当て文を使用することもできます。フォーリン・コマンドについての詳細は『Compaq OpenVMS ユーザーズ・マニュアル』を参照してください。
[オフセット,サイズ]
シンボル値の一部が置換文字によって上書きされることを指定します。この形式の文字列割り当て文は,シンボルに割り当てられている値を求め,その値の一部(オフセットとサイズによって定義されている部分)を置換文字列と置き換えます。この場合,かぎ括弧は必ず必要であり,シンボル名と左側のかぎ括弧の間には,スペースを指定できません。オフセットは,シンボル名の文字列値の先頭を基準にして,置換される最初の文字の相対位置を指定します。オフセットの値は 0 から始まります。
コマンドに指定したオフセットが,変更される文字列に含まれる最後の文字のオフセットより大きい場合には,文字列の最後と追加される置換文字列のオフセットの間に,スペースが挿入されます。指定できるオフセットの最大値は,768 です。
サイズは,置換される文字数を指定します。サイズの値は1から始まります。
オフセットとサイズは,整数式として指定します。整数式についての詳細は『Compaq OpenVMS ユーザーズ・マニュアル』を参照してください。サイズとオフセットを加算した値は,769 より小さくなければなりません。
置換文字列
変更される文字列を上書きするために使用される文字列を指定します。置換文字列がサイズ引数より短い場合には,指定されたサイズと等しくなるように,置換文字列の右側に空白が挿入されます。その後で,置換文字列を使って,シンボル名に割り当てられた文字列が上書きされます。置換文字列がサイズ引数より長い場合には,置換文字列の右側の部分が指定されたサイズまで切り捨てられます。置換文字列は,文字列リテラルとして指定するか,または文字列リテラルに評価されるシンボルやレキシカル関数として指定することができます。シンボルやレキシカル関数を使用する場合には,シンボル置換を要求するために,一重引用符(' ') で囲まなければなりません。シンボル置換についての詳細は『Compaq OpenVMS ユーザーズ・マニュアル』を参照してください。
#1 |
---|
$ TIME := SHOW TIME $ TIME 14-DEC-2001 11:55:44 |
この例では,TIME というシンボルが,SHOW TIME というコマンド文字列と等しいと定義されます。この場合,シンボル名がコマンド文字列の最初の単語として指定されているため,コマンド・インタプリタは自動的にシンボル名を文字列値と置き換え,SHOW TIME コマンドを実行します。
#2 |
---|
$ STAT := $DKA1:[TEDESCO]STAT $ STAT |
この例では,STAT をフォーリン・コマンドとして定義する方法が示されています。 STAT というシンボルは,ドル記号で始まってその後にファイル指定が続く文字列に等しいものとして定義されています。コマンド・インタプリタは,ファイル指定が実行可能なイメージのファイル指定であること,つまり,ファイル・タイプが EXE のファイルであると仮定します。
この後 STAT とタイプすると,コマンド・インタプリタはイメージを実行します。
#3 |
---|
$ A = "this is a big space." $ SHOW SYMBOL A A = "this is a big space." $ B := 'A' $ SHOW SYMBOL B B = "THIS IS A BIG SPACE." |
この例では,割り当て文と文字列割り当て文が比較されています。シンボル A は割り当て文を使って定義されているため,小文字や複数のスペースはそのまま保存されます。シンボル B は文字列割り当て文を使って定義されています。一重引用符(' ') が必要な点に注意してください。一重引用符を使用しないと, B というシンボル名はリテラル文字列 A に等しいものとして定義されてしまいます。文字列割り当て文を使用すると,シンボル Aの値がシンボル B に割り当てられる際に,文字は大文字に変換され,複数のスペースは1つのスペースに変換されてしまいます。
#4 |
---|
$ FILE_NAME := MYFILE $ FILE_NAME[0,2]:= OL $ SHOW SYMBOL FILE_NAME FILE_NAME = "OLFILE" |
この例では,シンボル FILE_NAME に割り当てられた文字列の最初の 2 文字を,文字列 OL に変更する置換式が示されています。オフセット 0 は文字列の最初の文字を指定し,サイズ指定の 2 は,文字列の長さを指定しています。
#5 |
---|
$ FILE_NAME := MYFILE $ FILE_TYPE := .TST $ FILE_NAME[F$LENGTH(FILE_NAME),4] := 'FILE_TYPE' $ SHOW SYMBOL FILE_NAME FILE_NAME = "MYFILE.TST" |
この例では,シンボル FILE_NAME に文字列 MYFILE を,シンボル FILE_TYPE に文字列 .TST を各々代入しています。 3 番目の割り当て文では,レキシカル関数 F$LENGTH を用いて,上書きを始めるオフセット値を特定しています。シンボル FILE_TYPE は,置換文字列(.TST)を参照するために用いられます。シンボルの展開を要求するために,一重引用符(' ') を指定しています。
レキシカル関数 F$LENGTH は,シンボル FILE_NAME の文字列の長さを返します。この値は,オフセットとして使用されます。シンボル FILE_TYPE の文字列の 4 文字を, FILE_NAME の文字列の最後に追加しています。シンボル FILE_NAME の結果は,文字列 MYFILE.TST になります。
コマンド・プロシージャを実行します。または,コマンド・インタプリタに対して,特定のファイルまたは装置からのコマンド入力を読み込むよう要求します。
@ ファイル指定 [パラメータ[,...]]
ファイル指定
前のコマンドに対する入力が読み込まれる装置またはファイル,あるいは実行されるコマンド・プロシージャを指定します。省略時のフィアル・タイプは .COM です。アスタリスク(*) やパーセント記号(%)などのワイルドカード文字を,ファイル指定で使用することはできません。パラメータ[,...]
コマンド・プロシージャに渡される 1 つから 8 つの省略可能なパラメータを指定します。これらのパラメータには,文字列値を入力した順に (P1, P2, ... P8) の 8 つのシンボルが割り当てられます。シンボルは,指定されたコマンド・プロシージャの内部でのみ有効です。各パラメータは,1 つまたは複数の空白で区切ります。空パラメータを指定するには,連続する 2 つの引用符("") を使用します。パラメータには,英数字または特殊文字を含む文字列値を指定することができます。ただし次の制約があります。
- コマンド・インタプリタは英字を大文字に変換し,各パラメータの区切り文字に空白を使用します。空白や小文字を含むパラメータを渡すには,パラメータを引用符で囲む必要があります。
- 最初のパラメータがスラッシュ(/) から始まる場合には,パラメータを引用符(" ") で囲まなければなりません。
- リテラルとしての引用符や空白を含むパラメータを渡すには,文字列全体を二重引用符で囲み,文字列の中で連続する 2 つの二重引用符を指定します。たとえば,コマンド・プロシージャ TEST.COM が次のコマンド行を含んでいたとします。
$ WRITE SYS$OUTPUT P1
この時,DCL プロンプト($) に対して次のコマンドを入力します。
$ @TEST "Never say ""quit"""
TEST.COM というプロシージャを実行すると,パラメータ P1 には次の文字列が割り当てられます。
Never say "quit"
文字列に引用符が含まれており,空白が含まれていない場合には,引用符は文字列の中でそのまま保存され,引用符で囲まれた英字は小文字のまま保存されます。たとえば,DCL プロンプトに対して次のコマンドを入力します。
$ @TEST abc"def"ghi
TEST.COM というプロシージャを実行すると,パラメータ P1 には次の文字列が割り当てられます。
ABC"def"GHI
シンボルをパラメータとして使用する場合には,シンボル置換を実行するためにシンボルを一重引用符(' ') で囲む必要があります。次の例を参照してください。
$ NAME = "JOHNSON" $ @INFO 'NAME'
一重引用符を使用すると, "JOHNSON" という値が NAME というシンボルと置き換えられます。したがって,"JOHNSON" というパラメータが, P1 として INFO.COM に渡されます。
@ コマンドは,以下を含むコマンド・プロシージャを実行する際に使用します。
- DCL コマンド行,またはデータ,あるいはその両方
- 特定のコマンド行に対する修飾子,またはパラメータ,あるいはその両方
コマンド,またはデータ,あるいはその両方を含むコマンド・プロシージャを実行するには,コマンド行の最初に @ コマンドを入力し,その次にコマンド・プロシージャ・ファイルの名前を指定します。コマンド・プロシージャには DCL コマンド,および現在実行中のコマンドまたはプログラムへの入力データを含めることができます。コマンド・プロシージャ内のすべての DCL コマンドは,ドル記号 ($) で始めなければなりません。コマンド行がハイフン (-) により継続している場合は,その継続行はドル記号から始まらなくても構いません。
コマンド・プロシージャ中で,行の最初にドル記号がなく,継続行でもないコマンド行は,現在実行中のコマンドまたはプログラムへの入力データとして扱われます。 DECK コマンドを使用すると,データのレコード位置にドル記号があることを指定できます。
コマンド・プロシージャ内に,他のコマンド・プロシージャを実行する @ コマンドを含めることもできます。トップ・レベルのコマンド・プロシージャも含め,最大で 16 回までコマンド・プロシージャをネストさせることができます。 SUBMIT コマンドを使用する,またはシステム・カード・リーダにコマンド・プロシージャを含むカード・デックを置くことにより,コマンド・プロシージャをバッチ・ジョブとしてキューに登録することもできます。
特定のコマンド行に対する修飾子,またはパラメータ,あるいはその両方を含むコマンド・プロシージャを実行するには,通常,コマンド行で修飾子またはパラメータを指定する位置に @ コマンドを置きます。次に,修飾子またはパラメータを含むコマンド・プロシージャ・ファイル名を指定します。
コマンド・プロシージャ・ファイルがコマンドに対するパラメータで始まる場合は, @ コマンドの前に空白が必要です。次の例を参照してください。
$ CREATE TEST.COM TIME [Ctrl/Z] $ SHOW @TEST 14-DEC-2001 17:20:26
反対に,コマンド・プロシージャ・ファイルがコマンドに対する修飾子で始まる場合は, @ コマンドの前に空白を入れてはいけません。
$ CREATE TEST_2.COM /SIZE [Ctrl/Z] $ DIR@TEST_2 Directory WORK$:[SCHEDULE] JANUARY.TXT;8 14-DEC-2001 15:47:45.57 FEBRUARY.TXT;7 14-DEC-2001 15:43:16.20 MARCH.TXT;6 14-DEC-2001 11:11:45.74 . . . Total of 11 files.
コマンド・プロシージャ・ファイルにパラメータ,修飾子,あるいはその両方が含まれている場合は,コマンド行をドル記号で始めてはいけません。 @ ファイル指定に続くコマンド行のデータは,プロシージャに対するパラメータとして扱われます。
/OUTPUT=ファイル指定
コマンド・プロシージャの出力を書き込むファイル名を指定します。省略時の設定では,出力は現在の SYS$OUTPUT 装置に書き込まれます。省略時の出力ファイル・タイプは .LIS です。アスタリスク(*) およびパーセント記号(%) ワイルドカード文字を,ファイル指定で使用することはできません。システムからの応答とエラー・メッセージは,指定したファイルと SYS$COMMAND の両方に書き込まれます。 /OUTPUT 修飾子を指定する場合は,コマンド・プロシージャのファイル指定のすぐあとに修飾子を指定しなければなりません。そのように指定しないと,/OUTPUT 修飾子はコマンド・プロシージャに渡されるパラメータとして解釈されます。SYS$OUTPUT の定義を変更すれば,コマンド・プロシージャからの出力先を変更することができます。コマンド・プロシージャの 1 行目として次のコマンドを指定すると,出力は指定したファイルに送られます。
$ DEFINE SYS$OUTPUT ファイル指定
このプロシージャが終了すると, SYS$OUTPUT はもとの等価文字列に戻されます。この方法では,コマンド・プロシージャを実行するときに /OUTPUT 修飾子を使用した場合と同じ結果になります。
#1 |
---|
$ CREATE DOFOR.COM $ ON WARNING THEN EXIT $ IF P1.EQS."" THEN INQUIRE P1 FILE $ FORTRAN/LIST 'P1' $ LINK 'P1' $ RUN 'P1' $ PRINT 'P1' [Ctrl/Z] $ @DOFOR AVERAGE |
この例では,DOFOR.COM というコマンド・プロシージャが示されています。このコマンド・プロシージャは,プログラムをコンパイルし,リンクし,実行するために,それぞれ FORTRAN コマンド,LINK コマンド,および RUN コマンドを実行します。 ON コマンドはコマンドの実行結果が警告状態やエラー状態である場合には,プロシージャの実行を継続しないことを要求しています。
DOFOR.COM を実行するときに,FORTRAN プログラムのファイル指定をパラメータ P1 として渡すことができます。プロシージャを実行するときに P1 の値を指定しなかった場合には, INQUIRE コマンドがターミナルにプロンプト・メッセージを表示し,そのプロンプトに対して入力した値が,シンボル P1 に割り当てられます。この例では,ファイル名 AVERAGE が P1 に割り当てられています。 FORTRAN コマンド,LINK コマンド,RUN コマンド,および PRINT コマンドには,それぞれ省略時のファイル・タイプが設定されているため,ファイル・タイプは含まれていません。
#2 |
---|
$ @MASTER/OUTPUT=MASTER.LOG |
このコマンドは,MASTER.COM という名前のプロシージャを実行します。出力はすべて MASTER.LOG ファイルに書き込まれます。
#3 |
---|
$ CREATE FILES.COM *.FOR, *.OBJ [Ctrl/Z] $ DIRECTORY @FILES |
この例は FILES.COM コマンド・プロシージャを示しています。このファイルには,DCL コマンド行へのパラメータが含まれています。ファイル全体が DCL により,コマンド入力として処理されます。このプロシージャを DIRECTORY コマンドの後で実行して,現在の省略時のディレクトリ内の FORTRAN ソース・ファイルとオブジェクト・ファイルの一覧を表示させています。
#4 |
---|
$ CREATE QUALIFIERS.COM /DEBUG/SYMBOL_TABLE/MAP/FULL/CROSS_REFERENCE [Ctrl/Z] $ LINK SYNAPSE@QUALIFIERS |
この例では,LINK コマンドに対する修飾子を含んでいる QUALIFIERS.COM というコマンド・プロシージャが示されています。 LINK コマンドを入力する時に,リンクするファイルのファイル指定のすぐ後に,コマンド・プロシージャを指定します。この時,ファイル指定と @ コマンドの間には空白を入れてはいけません。
#5 |
---|
$ CREATE SUBPROCES.COM $ RUN 'P1' - /BUFFER_LIMIT=1024 - /FILE_LIMIT=4 - /PAGE_FILES=256 - /QUEUE_LIMIT=2 - /SUBPROCESS_LIMIT=2 - 'P2' 'P3' 'P4' 'P5' 'P6' 'P7' 'P8' [Ctrl/Z] $ @SUBPROCES LIBRA /PROCESS_NAME=LIBRA |
この例は,SUBPROCES.COM というコマンド・プロシージャを示しています。このプロシージャは,イメージを実行するためのサブプロセスを生成する RUN コマンドを実行し,また,サブプロセス生成のためのクォータを定義する修飾子を含んでいます。実行するイメージ名は,パラメータ P1 で渡されます。パラメータ P2 から P8 は,追加する修飾子を指定するために使用できます。
この例では,P1 に LIBRA というファイル名が割り当てられます。これがサブプロセスで実行するイメージの名前です。 P2 には /PROCESS_NAME=LIBRA という修飾子が割り当てられます。これが RUN コマンドに追加される修飾子です。
#6 |
---|
$ CREATE EDOC.COM $ ASSIGN SYS$COMMAND: SYS$INPUT $ NEXT: $ INQUIRE NAME "File name" $ IF NAME.EQS."" THEN EXIT $ EDIT/TPU 'NAME'.DOC $ GOTO NEXT [Ctrl/Z] $ @EDOC |
この EDOC.COM というプロシージャは,EVE エディタを起動します。編集セッション終了時に,ラベル NEXT でプロシージャはループします。各ループにおいて,編集するファイル名を要求します。省略時のファイル・タイプは .DOC です。 INQUIRE コマンドへの応答に空行が入力されると, EXIT コマンドでプロシージャが終了します。
ASSIGN コマンドで,プロシージャ実行中に SYS$INPUT の等価名を変更しています。この変更により,EVE エディタがコマンド・プロシージャ・ファイルではなく,ターミナルから入力データを読むことができます。 SYS$INPUT が変更されない場合には,省略時の入力データ・ストリームはコマンド・プロシージャ・ファイルになります。コマンド・プロシージャ終了時に,SYS$INPUT は解除され元の設定に戻ります。
#7 |
---|
! PEOPLE.DAT ! A set of data with embedded key qualifiers for the SORT command. ! ! Usage: SORT@PEOPLE.DAT ! /KEY=(POS:10,SIZE:10) sys$input people.out Fred Flintstone 555-1234 Barney Rubble 555-2244 Wilma Flintstone 555-1234 Betty Rubble 555-2244 George Slate 555-8911 Dino Dinosaur 555-1234 $! $ purge people.out $ type people.out |
ソートされた名簿を PEOPLE.OUT ファイルに作成し,それを表示します。この例では,DCL コマンドの中間で "@" を使用した場合に, DCL がそのファイル全体をコマンド入力として処理することを示します。
前へ | 次へ | 目次 | 索引 |