前へ | 次へ | 目次 | 索引 |
英数字の識別子を,それに相当する整数に変換します。または,その逆の操作を実行します。識別子は,ユーザのカテゴリを識別するための名前または番号です。システムは,この識別子を使用して,資源に対する利用者のアクセス権を判断します。
F$IDENTIFIER (識別子,変換タイプ)
識別子
変換される識別子を指定します。整数から名前に変換する場合は,整数式として指定します。名前を整数に変換する場合は,文字列式として指定します。Name Hidden 属性を持つ識別子の場合,質問に識別子がない場合,または権利データベースへの読み込みアクセス権がない場合, F$IDENTIFIER はエラーになります。属性についての詳細は,『OpenVMS Guide to System Security』を参照してください。
変換タイプ
実行される変換のタイプを指定します。 識別子 引数が英数字の場合は, "NAME_TO_NUMBER" を含む文字列として 変換タイプ を指定します。 識別子 引数が数値の場合は, "NUMBER_TO_NAME" を含む文字列として 変換タイプ を指定します。
#1 |
---|
$ UIC_INT= F$IDENTIFIER("SLOANE","NAME_TO_NUMBER") $ SHOW SYMBOL UIC_INT UIC_INT = 15728665 Hex = 00F00019 Octal = 00074000031 $ UIC = F$FAO("!%U",UIC_INT) $ SHOW SYMBOL UIC UIC = [360,031] |
この例では,F$IDENTIFIER 関数を使用して, MANAGERS,SLOANE]というUIC のメンバ識別子を整数に変換しています。 F$IDENTIFIER 関数は,メンバ識別子 SLOANE が, 15728665 という整数に等しいことを示しています。 SLOANE という識別子を指定する場合には,大文字を使用しなければなりません。
この8進数を標準的な数値形式の UIC に変換するには, F$FAO 関数と !%Uディレクティブを使用します (このディレクテイブは,ロングワードを名前形式の UIC に変換します)。この例では,SLOANE というメンバ識別子は,数値形式の UIC[360,031]と同値です。
#2 |
---|
$ UIC_INT = (%O31 + (%X10000 * %O360)) $ UIC_NAME = F$IDENTIFIER(UIC_INT,"NUMBER_TO_NAME") $ SHOW SYMBOL UIC_NAME UIC_NAME = "ODONNELL" |
この例は,数値形式の UIC[360,031]に対応する英数字のの識別子を求めています。まず,UIC[360,031]に対応するロングワード整数を求めなければなりません。このためにメンバ番号を下位ワードに,グループ番号を上位ワードに挿入します。次に,F$IDENTIFIER 関数を使用して,その整数に対応する名前形式の識別子を求めます。
指定した式の結果と等価な整数値を戻します。
F$INTEGER (式)
式
評価される式を指定します。整数または文字列式を指定します。整数式を指定すると, F$INTEGER 関数は式を評価し結果を戻します。文字列式を指定すると,F$INTEGER 関数は式を評価し,その結果の文字列を整数に変換して戻します。
文字列式を評価した後,F$INTEGER 関数は次の方法で整数に変換します。評価した結果の文字列に,有効な整数を形成する文字が含まれている場合は, F$INTEGER 関数は整数値を戻します。評価した結果の文字列に,有効な整数を形成する文字が含まれていない場合は,文字列が T,t,Y,または y で始まっていると F$INTEGER 関数は 1 を戻します。文字列は他の文字で始まる場合は,F$INTEGER は 0 を戻します。
#1 |
---|
$ A = "23" $ B = F$INTEGER("-9" + A) $ SHOW SYMBOL B B = -923 Hex=FFFFFC65 Octal=176145 |
この例では,F$INTEGER 関数を使用して,関数により戻された整数値をシンボルに割り当てる方法を示しています。この例では,F$INTEGER 関数は,文字列式("--9" + A) と等価な整数を戻します。まず F$INTEGER 関数は,文字列リテラル "--9" と "23" を連結させて,文字列式を評価します。シンボル A の値は,自動的に文字列式に置換される点に注意してください。どちらの引数も文字列リテラルなので,プラス記号(+) は文字列連結演算子である点にも注意してください。
文字列式を評価した後,F$INTEGER 関数は,結果の文字列式("--923") を整数に変換し,値 --923 を戻します。この整数値は,シンボル B に割り当てられます。
指定した文字列の長さを戻します。
F$LENGTH (文字列)
文字列
長さを求める文字列を指定します。文字列式として指定します。
#1 |
---|
$ MESSAGE = F$MESSAGE(%X1C) $ SHOW SYMBOL MESSAGE MESSAGE = "%SYSTEM-F-EXQUOTA, exceeded quota" $ STRING_LENGTH = F$LENGTH(MESSAGE) $ SHOW SYMBOL STRING_LENGTH STRING_LENGTH = 33 Hex = 00000021 Octal = 000041 |
この例では,最初の割り当てステートメントでは, 16 進数の 1C に対応するメッセージを戻すために,F$MESSAGE 関数を使用しています。メッセージは,文字列式として戻され,MESSAGE というシンボルに割り当てられます。
次に, F$LENGTH 関数を使用して,シンボル MESSAGE に割り当てられた文字列の長さが戻されています。 F$LENGTH 関数に対する引数として,シンボル MESSAGE を使用する場合,引用符 (" ") で囲む必要はありません (シンボルを囲む引用符は,文字列式では使用されません)。
F$LENGTH 関数は,文字列の長さを戻し,その値をシンボル STRING_LENGTH に割り当てます。この例の最後で,シンボル STRING_LENGTH の値は,シンボル MESSAGE の値の文字数,つまり 33 になります。
文字列に含まれる特定の部分を探し,最初の文字のオフセットを整数値で戻します。オフセットとは,文字列の先頭を基準にした文字(1文字または部分文字列)の位置です。オフセットとは,文字列の開始位置を基準にして,文字,または部分文字列までの位置を示します。文字列の1文字目は,常に文字列の先頭からオフセット0の位置にあります。部分文字列が見つからないと, F$LOCATE 関数は,検索文字列の長さ(文字列の最後の文字のオフセットに 1 を加算した値)を戻します。
F$LOCATE (部分文字列,文字列)
部分文字列引数がない場合には, F$LOCATE 関数は,文字列の最後の文字のオフセットより, 1だけ大きなオフセットを戻します(これは文字列の長さに相当します)。
部分文字列
文字列 引数に指定した文字列から検索したい文字列を指定します。文字列
F$LOCATE が編集する文字列を指定します。
#1 |
---|
$ FILE_SPEC = "MYFILE.DAT;1" $ NAME_LENGTH = F$LOCATE(".",FILE_SPEC) |
この例では, F$LOCATE 関数は,文字列の先頭を基準にした,文字列中のピリオド(.)の位置を戻します。ピリオドはオフセット 6 の位置に存在するため, 6 という値がシンボル NAME_LENGTH に割り当てられます。また,NAME_LENGTH は, MYFILE.DAT というファイル指定のファイル名の部分の長さ,つまり6に等しくなります。
部分文字列引数であるピリオドは,文字列リテラルとして指定されているので,引用符 (" ") で囲まれています。しかし,FILE_SPEC 引数はシンボルであるため,引用符で囲む必要はありません。このシンボルは,関数を処理しているときに,自動的に現在の値に置き換えられます。
#2 |
---|
$ INQUIRE TIME "Enter time" $ IF F$LOCATE(":",TIME) .EQ. F$LENGTH(TIME) THEN - GOTO NO_COLON |
これは,コマンド・プロシージャの一部です。この中では,F$LOCATE 関数の結果と F$LENGTH 関数の結果を比較し,結果が等しいかどうかを調べています。 1文字または部分文字列が,ある文字列に含まれているかどうかを判断するときに,この方法をよく使用します。
この例では,INQUIRE コマンドが,時刻の値の入力を要求するプロンプトを表示し,利用者が入力した時刻をシンボル TIME に割り当てます。 IFコマンドは,プロンプトに対する応答として入力された文字列に,コロンが含まれているかどうかを調べます。 F$LOCATE 関数から戻された値が,F$LENGTH 関数から戻された値と等しい場合には,コロンは文字列の中に含まれていません。 F$LOCATE 関数と F$LENGTH 関数はどちらも整数値を戻すため, (.EQS.演算子ではなく).EQ. 演算子が使用されています。
部分文字列引数であるコロンは文字列リテラルであるため,引用符で囲まれています。しかし,シンボル TIME は,引用符で囲む必要はありません。これは,文字列式として自動的に評価されるためです。
特定のシステム状態コードに対応するファシリティ,重要度,ID,およびテキストを,文字列として戻します。
F$MESSAGE (状態コード[,メッセージ構成要素リスト])
各システム・メッセージ・ファイルは,数値または値の範囲に対応づけられています。ただし,必ずしもすべての数値に対応するメッセージがあるわけではありません。対応するメッセージのない数値を引数として指定すると, F$MESSAGE 関数は,NOMSG エラー・メッセージを含む文字列を戻します。
システム・エラー・メッセージについての詳細は,『OpenVMS System Messages: Companion Guide for Help Message Users』を参照してください。
状態コード
エラー・メッセージ文を表示したい状態コードを指定します。状態コードは,整数式として指定します。メッセージ構成要素リスト
システム・メッセージの構成要素を戻すことを指定します。パラメータが空または指定されない場合は, すべてのシステム・メッセージの構成要素が戻されます。システム・メッセージの構成要素に有効なキーワードを 表 DCLI-11 に示します。
表 DCLI-11 F$MESSAGE キーワード 構成要素キーワード 戻される情報 FACILITY 機能名 SEVERITY 重大度表示 IDENT メッセージ・テキスト短縮形 TEXT メッセージの説明
FACILITY, SEVERITY, および IDENT を (個々に,または任意に組み合わせて)指定すると,戻されたメッセージにはパーセント記号 (%) がつくことに注意してください。複数のキーワードを指定すると, メッセージはハイフンで区切られます。
TEXT だけを指定した場合, メッセージに文字記号は含まれません。 TEXT を FACILITY,SEVERITY,または IDENT と同時に指定した場合は,メッセージがコンマと空白(, )で区切られます。
#1 |
---|
$ ERROR_TEXT = F$MESSAGE(%X1C) $ SHOW SYMBOL ERROR_TEXT ERROR_TEXT = "%SYSTEM-F-EXQUOTA, exceeded quota" |
この例では,F$MESSAGE 関数を使用して, %X1C という状態コードに対応するメッセージを判断する方法を示しています。 F$MESSAGE 関数は,メッセージ文字列を戻します。その文字列は,ERROR_TEXT というシンボルに割り当てられます。
#2 |
---|
$ SUBMIT IMPORTANT.COM $ SYNCHRONIZE /entry='$ENTRY' $ IF $STATUS THEN EXIT $! $ JOB_STATUS = $STATUS $! $ IF "%JOBDELETE" .EQS. F$MESSAGE (JOB_STATUS, "IDENT") $ THEN . . . $ ELSE $ IF "%JOBABORT" .EQS. F$MESSAGE (JOB_STATUS, "IDENT") $ THEN . . . $ ELSE $ . . . $ ENDIF $ ENDIF . . . |
この例は,バッチ・ジョブをキューに登録し,終了するのを待つコマンド・プロシージャです。ジョブが正常に終了しなかった場合は,バッチ・ジョブの終了状態に基づいてさらに処理が続きます。
最初のコマンドで,コマンド・プロシージャ IMPORTANT.COM を登録します。 2番目のコマンドで, SYNCHRONIZEを使用してジョブが終了するのを待つように指示します。 3番目のコマンドでジョブの終了を確認し,成功していればプロシージャを終了します。次のコマンドでシンボルに状態を保存します。
最初の IF 文は,F$MESSAGE を使用して,実行前にジョブが削除されたかを判断します。削除されている場合は,ジョブの再登録,または MAIL を使ってユーザに知らせる,のいずれか可能な方の処理を行います。
次の IF 文は,F$MESSAGE を使用して,ジョブが実行中に削除されたかを判断します。その結果,クリーンアップ処理されるか, または THEN ブロックでオペレータの介入要求があります。
どちらの IF 文も真ではない場合は, その他の失敗状態が戻されます。 ELSE 文以降のブロックで行われる他の処理が要求されます。
プロセスが実行されているモードを示す文字列を戻します。 F$MODE 関数には引数はありませんが,括弧は指定しなければなりません。
F$MODE()
なし。
F$MODE レキシカル関数は,プロセスがじっこうされているモードを示す文字列を戻します。引き数はとりませんが,括弧は省略できません。会話型で実行する場合と,非会話型で実行する場合とでは,別々に処理する必要がある時,コマンド・プロシージャで F$MODE 関数を使用すると便利です。ログイン・コマンド・プロシージャに F$MODE 関数,または F$ENVIRONMENT 関数を入れておき,会話型ターミナル・セッションと非会話型セッションではことなるコマンドを実行するようにしておきます。
ログイン・コマンド・プロシージャに F$MODE 関数を含めず,会話型プロセスから実行されるかどうかを調べていない時に,ログイン・コマンド・プロシージャが非会話型プロセス (たとえばバッチ・ジョブ) から実行されると,コマンド・プロシージャ内に会話型プロセスでのみ使用できるコマンドが含まれている場合は,プロセスが異常終了する可能性があります。
コマンド・プロシージャは F$MODE 関数を使用して,会話型ターミナル・セッションでプロシージャが実行されるかどうか調べることができます。また F$MODE 関数の戻り値に基づいて,制御を移すことができます。
#1 |
---|
$ IF F$MODE() .NES. "INTERACTIVE" THEN GOTO NON_INT_DEF $ INTDEF: ! Commands for interactive terminal sessions . . . $ EXIT $ NON_INT_DEF: !Commands for noninteractive processes . . . |
この例では,ログイン・コマンド・ファイルの初めの部分が示されています。このコマンド・プロシージャは,2 つの初期化コマンドがあります。 1 つは会話型モードの場合のコマンドで,もう 1 つは(バッチ・ジョブやネットワーク・ジョブを含む)非会話型モードの場合のコマンドです。 IF コマンドは,F$MODE から戻された文字列が,INTERACTIVE という文字列と,等しいかどうかを調べます。等しくない場合には,制御は NON_INT_DEFというラベルに分岐します。等しい場合には,INTDEF というラベルのあとのステートメントが実行され,プロシージャは NON_INT_DEF の前にあるステートメントで終了します。
前へ | 次へ | 目次 | 索引 |