前へ | 次へ | 目次 | 索引 |
現在の省略時のディレクトリ名文字列を戻します。 F$DIRECTORY 関数には引数はありませんが,括弧を指定しなければなりません。
F$DIRECTORY ()
なし。
F$DIRECTORY 関数を使用すると,コマンド・プロシージャの現在の省略時のディレクトリ名を保存し,別の作業のために省略時のディレクトリを他のディレクトリに変更し,再び元の設定に戻すことができます。
#1 |
---|
$ SAVE_DIR = F$DIRECTORY() $ SET DEFAULT [CARLEN.TESTFILES] . . . $ SET DEFAULT 'SAVE_DIR' |
この例は,現在の省略時のディレクトリ設定を保存するために, F$DIRECTORY 関数を使用するコマンド・プロシージャの一部を示しています。割り当て文で,SAVE_DIR というシンボルに,現在のディレクトリの値を割り当てます。次に SET DEFALT コマンドで,新しい省略時のディレクトリを設定します。このあと,SET DEFAULT コマンドで SAVE_DIR シンボルを使用することにより,もとの省略時のディレクトリに戻しています。
F$ENVIRONMENT 関数で DEFAULT キーワードを使用すれば,省略時のディスクとディレクトリをもとに戻すことができます。複数のディスクを含む場合には, F$DIRECTORY 関数ではなく F$ENVIRONMENT 関数を使用します。
編集リスト引数に指定された編集をもとに,文字列式を編集します。
F$EDIT (文字列, 編集リスト)
文字列
編集される文字列を指定します。引用符で囲まれた部分は編集されません。編集リスト
編集リスト文字列に対して実行される編集のタイプを指定する, 1 つまたは複数のキーワードを含む文字列を指定します。
編集 操作 COLLAPSE すべてのスペースとタブを文字列から削除します。 COMPRESS 複数のスペースとタブを1つのスペースに変換します。 LOWERCASE 文字列を小文字に変換します。 TRIM 先行スペースとタブ,および後続のスペースとタブを文字列から削除します。 UNCOMMENT コメントを文字列から削除します。 UPCASE 文字列を大文字に変換します。
2 つ以上のキーワードを指定する場合は,コンマ (,) で区切ります。キーワードを短縮することはできません。
文字列の中で引用符で囲まれた部分には,編集は適用されません。したがって,文字列に引用符 (" ") が含まれている場合には,引用符で囲まれている文字は編集リストに指定されている編集の影響を受けません。
注意
編集リストに LOWERCASE と同時に UPCASE を指定した場合,UPCASE が優先されます。
#1 |
---|
$ LINE = " THIS LINE CONTAINS A "" QUOTED "" WORD" $ SHOW SYMBOL LINE LINE = " THIS LINE CONTAINS A " QUOTED " WORD" $ NEW_LINE = F$EDIT(LINE, "COMPRESS, TRIM") $ SHOW SYMBOL NEW_LINE NEW_LINE = "THIS LINE CONTAINS A " QUOTED " WORD" |
この例では, F$EDIT 関数を使用して,複数のブランクは1つのブランクに変換され,先行ブランクと後続ブランクを削除することにより,文字列が短縮されています。この LINE という文字列には,引用符が含まれており, QUOTED という単語を囲んでいます ( 文字列に引用符を入力するには,割り当て文で二重引用符を使用しなければなりません )。
F$EDIT 関数は, 文字列の中で引用符で囲まれた部分ではスペースを短縮しません。したがって, スペースは QUOTED という単語を囲んだままになります。
#2 |
---|
$ LOOP: $ READ/END_OF_FILE = DONE INPUT_FILE RECORD $ RECORD = F$EDIT(RECORD, "TRIM, UPCASE") $ WRITE OUTPUT_FILE RECORD $ GOTO LOOP . . . |
この例では,ファイルからレコードを読み込み,編集し,出力ファイルに書き込むという作業を繰り返すためのループが設定されています。編集後のレコードからは,先行ブランクと後続のブランクが削除されており,文字列は大文字に変換されています。
#3 |
---|
$ UNCOMMENT_LINE = F$EDIT("$ DIR ! THIS IS THE COMMENT", "UNCOMMENT") $ SHOW SYMBOL UNCOMMENT_LINE $ UNCOMMENT_LINE = "$ DIR" |
この例ではコメントを削除するために F$EDIT 関数を使用しています。
指定した区切り文字で区切られた要素で構成される文字列から, 1 つの要素を取り出します。
F$ELEMENT (要素番号, 区切り文字, 文字列)
要素番号
取り出される要素の番号を指定します ( 要素番号は0から始まります )。要素番号 引数は,整数式として指定します。要素番号 が文字列に含まれる要素の数より大きい場合には,区切り文字が戻されます。区切り文字
文字列に含まれる要素を区切るために,使用する文字を指定します。区切り文字は,文字列式として指定します。文字列
区切り文字で区切られた要素のリストを含む文字列を指定します。文字列は,文字列式として指定します。
#1 |
---|
$ DAY_LIST = "MON/TUE/WED/THU/FRI/SAT/SUN" $ INQUIRE DAY "ENTER DAY (MON TUE WED THU FRI SAT SUN)" $ NUM = 0 $ LOOP: $ LABEL = F$ELEMENT(NUM,"/",DAY_LIST) $ IF LABEL .EQS. "/" THEN GOTO END $ IF DAY .EQS. LABEL THEN GOTO 'LABEL' $ NUM = NUM +1 $ GOTO LOOP $ $ MON: . . . |
この例では,リストに含まれる要素のそれぞれと,入力値を比較するためのループが設定されています。 DAY に対する値が DAY_LIST の 1 要素と一致する場合には,制御は対応するラベルに移ります。 F$ELEMENT 関数から戻される値が区切り文字の場合には, DAY の値は DAY_LIST に含まれていないため,制御は END というラベルに移ります。
#2 |
---|
$ ! INDEX.COM $ ! $ CHAPTERS = "0,1,2,3,4,5,6,A,B,C" $ NEXT = 0 $ LOOP: $ NEXT = NEXT + 1 $ NUM = F$ELEMENT(NEXT,",",CHAPTERS) $ IF (NUM .NES. ",") $ THEN $ RUN INDEX CHAP'NUM' $ GOTO LOOP $ ENDIF |
この例ではファイルに CHAP1, CHAP2, ... CHAP6, CHAPA, CHAPB, CHAPC という順に名前を付けるプロセスを示しています。プロシージャ・ロジックを初期化状態にするため,ゼロは CHAPTERS という文字列に含まれます。 NEXT はゼロに初期化されます。このプロシージャはループを実行します。最初の繰り返しで NEXT は 1 に増え,その結果 "1" を呼び出します。次にプロシージャは index, chapter1 を実行します。 2 回めの繰り返しで NEXT は 2 に増え,その結果 "1" を呼び出します。さらにプロシージャは index, chapter2 を実行し,指定した区切り文字を呼び出すまでプロセスは続きます。
DCL コマンド環境に関する情報を戻します。
F$ENVIRONMENT (項目)
項目
戻される情報のタイプを指定します。次に示すキーワードのいずれか 1 つを指定します ( キーワードを短縮することはできません )。
項目 データ・
タイプ戻される情報 CAPTIVE 文字列 CAPTIVE 属性を持ったアカウントにログインしている場合は,TRUE を戻します。システム管理者は,Authorize ユーティリティ (AUTHORIZE) を使用して,利用者登録ファイルにも CAPTIVE アカウントを定義できます。 CONTROL 文字列 SET CONTROL コマンドによって現在使用可能になっている制御文字を戻します。複数の制御文字が使用可能な場合には,各文字はコンマで区切られます。制御文字が使用可能ではない場合には,空文字列 ("") が戻されます。 DEFAULT 文字列 現在の省略時の装置,およびディレクトリ名を戻します。戻される文字列は SHOW DEFAULT コマンドにより出力される文字列と同じです。 DEPTH 整数値 現在のコマンド・プロシージャのネスティングの中での深さを,整数として戻します。会話型でコマンド・プロシージャを実行する場合,およびバッチ・ジョブでコマンド・プロシージャを実行する場合,コマンド・プロシージャの深さは 0 です。ネスティングされたコマンド・プロシージャの深さは,そのネスティングされたプロシージャを実行したコマンド・プロシージャの深さより,1 だけ大きな値です。 DISIMAGE 文字列 イメージを直接起動することが許可されていないアカウント ( たとえば RUN などは許可されていません ) にログインした場合, TRUE を戻します。システム管理者は Authorize ユーティリティを使用して,利用者登録ファイル内のアカウントに DISIMAGE 属性を追加または削除できます。 INTERACTIVE 文字列 プロセスが会話型で実行されている場合は,TRUE を戻します。 KEY_STATE 文字列 現在ロックされているキーパッド状態を示す文字列を戻します。キーパッド状態についての詳細は,DEFINE/KEY コマンドの説明を参照してください。 MAX_DEPTH 整数値 コマンド・プロシージャの最大の深さを示す整数を戻します。 MESSAGE 文字列 SET MESSAGE コマンドによる現在の設定を示す文字列を戻します。この文字列には,修飾子名を区切るために,スラッシュ(/) が含まれています。したがって,F$ENVIRONMENT("MESSAGE") からの出力を, SET MESSAGE コマンドのうしろに追加することにより,有効な DCL コマンド行を作成できます。 NOCONTROL 文字列 SET NOCONTROL コマンドによって,現在禁止されている制御文字を戻します。複数の文字が禁止されている場合には,各文字はコンマ (,) で区切られます。SET NOCONTROL コマンドによって制御文字が禁止されていない場合には,空文字列が戻されます。 ON_CONTROL_Y 文字列 コマンド・プロシージャから実行される場合は, ON_CONTROL_Y が設定されていれば TRUE を戻します。 DCL コマンド・レベルでは,ON_CONTROL_Y は常に FALSE を戻します。 ON_SEVERITY 文字列 コマンド・プロシージャから実行される場合は, ON コマンドで指定した動作が実行される重要度を戻します。 SET NOON が有効な場合,または DCL コマンド・レベルで使用した場合, ON_SEVERITY は NONE を戻します。 OUTPUT_RATE 文字列 省略時の出力速度を含むデルタ時間文字列を戻します。これは,バッチ・ジョブの実行中に,バッチ・ジョブ・ログ・ファイルにデータが書き込まれる頻度を示します。会話型で使用した場合,OUTPUT_RATE は空文字列を戻します。 PROCEDURE 文字列 現在のコマンド・プロシージャのファイル指定を戻します。会話型で使用した場合は,端末装置名が戻されます。 PROMPT 文字列 現在の DCL プロンプトを戻します。 PROMPT_CONTROL 文字列 プロンプトの前に改行が挿入される場合は TRUE を戻します。 PROTECTION 文字列 現在の省略時のファイル保護を示す文字列を戻します。文字列は有効な DCL コマンド行となるように, SET PROTECTION/DEFAULT コマンドで使用できる形式です。 RESTRICTED 文字列 制限付アカウントの場合は TRUE を戻します。システム管理者は,Authorize ユーティリティを使用して,利用者登録ファイルに制限付アカウントを定義できます。 SYMBOL_SCOPE 文字列 現在のシンボルの定義範囲を示すため,文字列 [NO] LOCAL, [NO] GLOBALを戻します。 VERB_SCOPE 文字列 動詞の現在のシンボルの定義範囲を示すため,文字列 [NO] LOCAL, [NO] GLOBAL を戻します ( 詳細は, SET SYMBOL コマンドの説明を参照してください )。 VERIFY_IMAGE 文字列 SET VERIFY=IMAGE コマンドが有効である場合は,TRUE を戻します。イメージ・チェックが有効な場合には,コマンド・プロシージャは,イメージによって読み込まれた入力データを表示します。 VERIFY_PREFIX 文字列 SET PREFIX コマンドで設定される前置制御文字列を戻します。 VERIFY_PROCEDURE 文字列 SET VERIFY=PROCEDURE コマンドが有効である場合は,TRUE を戻します。コマンド・チェックが有効な場合には,コマンド・プロシージャは, DCL コマンド行を表示します。
#1 |
---|
$ SAVE_MESSAGE = F$ENVIRONMENT("MESSAGE") $ SET MESSAGE/NOFACILITY/NOIDENTIFICATION . . . $ SET MESSAGE'SAVE_MESSAGE' |
この例では,F$ENVIRONMENT 関数を使用して,現在のメッセージ設定を変更する前に,その設定を保存します。コマンド・プロシージャの最後で,もとのメッセージ設定が復元されます。SAVE_MESSAGE というシンボルを囲む一重引用符 (' ') は,そのシンボル名を値と置き換えるように指定しています。
#2 |
---|
$ MAX = F$ENVIRONMENT("MAX_DEPTH") $ SHOW SYMBOL MAX MAX = 32 Hex = 00000020 Octal = 00000000040 |
この例では,コマンド・プロシージャ内で可能な最大のネスティングの深さを判断するために,F$ENVIRONMENT 関数を使用しています。
#3 |
---|
$ SAVE_PROT = F$ENVIRONMENT("PROTECTION") $ SET PROTECTION = (SYSTEM:RWED, OWNER:RWED, GROUP, WORLD)/DEFAULT . . . $ SET PROTECTION = ('SAVE_PROT')/DEFAULT |
この例では,F$ENVIRONMENT 関数を使用して,保護を変更する前に,現在の省略時の保護を保存します。コマンド・プロシージャの最後で,もとの保護に戻されます。シンボル置換を要求するためには, SAVE_PROT というシンボルを引用符で囲まなければなりません。
文字列から部分文字列を取り出します。
F$EXTRACT (開始, 長さ, 文字列)
開始
取り出したい部分文字列の先頭のオフセットを指定します。 0 以上の整数式として指定します。オフセットは文字の相対位置,または文字列の先頭の部分文字列です。オフセット位置は 0 から始まります。文字列は,常に左端の文字から始まります。
文字列の長さ以上のオフセットを指定した場合には,空文字列 ("") を戻します。
長さ
取り出す文字数を指定します。文字列サイズ以下でなければなりません。長さは,0 以上の整数式を指定します。オフセットから文字列の最後までの文字数より大きな値の長さを指定すると,オフセットから文字列の最後までの文字を戻します。
文字列
編集する文字列を指定します。文字列には,文字列式を指定します。
#1 |
---|
$ NAME = "PAOLO TESTA" $ FIRST = F$EXTRACT(0,5,NAME) $ SHOW SYMBOL FIRST FIRST = "PAOLO" |
この例はコマンド・プロシージャの一部であり,シンボル NAME に割り当てられた文字列から最初の 5 文字を取り出すために, F$EXTRACT 関数を使用しています。オフセット引数と長さ引数は整数であり,文字列引数はシンボルです。レキシカル関数に対する引数として整数やシンボルを使用する場合には,これらを引用符 (" ") で囲む必要はありません。
#2 |
---|
$ P1 = "MYFILE.DAT" $ FILENAME = F$EXTRACT(0,F$LOCATE(".",P1),P1) |
この例もコマンド・プロシージャの一部です。文字列からある 1 文字を見つけ,その位置で終わる部分文字列を取り出す方法を示しています。
F$LOCATE 関数は, P1 に対応する文字列中のピリオドのオフセット位置を示す数値を戻します ( ピリオドのオフセット位置は,ピリオドの前の部分文字列の長さと同じです )。
F$EXTRACT 関数の引数として F$LOCATE 関数を使用して,文字列から取り出す文字数を指定しています。パラメータ MYFILE.DAT を使用してプロシージャを呼び出し,これらのステートメントを実行すると,シンボル FILENAME に MYFILE という値が割り当てられます。
上記の例で F$LOCATE 関数は,ファイル指定にサブディレクトリ名を含むディレクトリ指定や,ノード名が含まれていないとして解釈しています。完全なファイル指定からファイル名を取り出すためには,F$PARSE 関数を使用します。
#3 |
---|
$ IF F$EXTRACT(12,2,F$TIME()) .GES. "12" THEN GOTO AFTERNOON $ MORNING: $ WRITE SYS$OUTPUT "Good morning!" $ EXIT $ AFTERNOON: $ WRITE SYS$OUTPUT "Good afternoon!" $ EXIT |
この例では,現在の時刻が午前であるか午後であるかに応じて,異なるメッセージを表示するプロシージャを示しています。最初に,F$TIME 関数を使用して,現在の時刻が戻されます。 F$TIME 関数は文字列を戻し,この文字列が F$EXTRACT 関数に対する文字列引数として使用されます。 F$TIME 関数が引数として使用されている場合には,この関数は自動的に評価されるので,引用符を使用する必要はありません。
次に F$EXTRACT 関数は, F$TIME から戻された日付と時刻の示された文字列から時を取り出します。 F$TIME から渡される文字列には,常に先頭から12 文字のオフセットから時フィールドが含まれています。
F$EXTRACT 関数は,このオフセットから始まる 2 文字を文字列から取り出し,取り出した文字列値と文字列値 12 を比較します。比較結果が真の場合には,プロシージャは "Good afternoon!" を出力します。比較結果が偽の場合には,"Good morning!" を出力します。
また,時刻指定から時フィールドを取り出すために,F$CVTIME 関数を使用できます。 F$CVTIME 関数を使用する方が,上記の例に示されている方法に比べ簡単です。
前へ | 次へ | 目次 | 索引 |