前へ | 次へ | 目次 | 索引 |
文字列データからビット・フィールドを取り出し,その結果を符号付き値として整数に変換します。
F$CVSI (開始ビット,ビット数,文字列)
開始ビット
取り出される最初のビットのオフセットを指定します。オフセットは,文字列の下位(右端)ビットを位置番号 0 として判断します。オフセットは整数式として指定します。負の値を持つ式を指定した場合や,文字列のビット数を越える値を持つ式を指定した場合には, DCL は INVRANGEというエラー・メッセージを表示します。
ビット数
整数値に変換するために取り出されるビットの長さを指定します文字列のビット数以下でなければなりません。負の値を持つ式を指定した場合や,ビット位置オフセットに加算したときに,値が無効になる式を指定した場合には, DCL は INVRANGE というエラー・メッセージを表示します。
文字列
ビットが取り出される文字列を指定します。文字列は,文字列式として指定します。
#1 |
---|
$ A[0,32] = %X2B $ SHOW SYMBOL A A = "+..." $ X = F$CVSI(0,4,A) $ SHOW SYMBOL X X = -5 Hex = FFFFFFFB Octal = 177773 |
この例では,算術オーバーレイを使用して, 2B という 16 進数を,A というシンボルの 32 ビットすべてに割り当てています。算術オーバレイについての詳細は,割り当て文(=)の説明を参照してください。
シンボル A は未定義状態だったため,オーバレイが実行されたあと,このシンボルに文字列値が割り当てられます。シンボルが未定義の場合,算術オーバレイを実行すると,その結果として文字列値が割り当てられます。シンボルがすでに定義されている場合には,オーバレイを実行したあと,そのシンボルは,同じデータ・タイプのままです。 2B という 16 進数は,ASCIIのプラス記号(+) に対応します。
次に F$CVSI 関数は,シンボル A から下位4ビットを取り出します。下位4ビットには,B という 16 進数の 2進表現が含まれています。これらのビットが,符号付き値として整数に変換されます。変換後の値である -5 が,シンボル X に割り当てられます。
#2 |
---|
$ SYM[0,32] = %X2A $ SHOW SYMBOL SYM SYM = "*..." $ Y = F$CVSI(0,33,SYM) %DCL-W-INVRANGE, field specification is out of bounds - check sign and size $ SHOW SYMBOL Y %DCL-W-UNDSYM, undefined symbol - check spelling |
この例では F$CVSI 関数に指定された幅引数が大きすぎたため, DCL がエラー・メッセージを実行しシンボル Y に値を割り当てていません。
絶対時刻,または複合時刻文字列を yyyy-mm-dd hh:mm:ss.cc という形式の文字列に変換します。また F$CVTIME 関数は,絶対時刻,デルタ時間,またはそれらの組み合せの文字列に関する情報も戻します。
F$CVTIME ([入力時刻][,出力時刻形式][,フィールド])
入力時刻
絶対時刻,デルタ時間,または複合時刻を含む文字列,あるいは TODAY,TOMORROW, YESTERDAY のいずれかを指定します。入力時刻文字列は,文字列式として指定します。 入力時刻引数を省略した場合,または空文字列 ("") が指定された場合は,絶対時刻形式での現在のシステムの日付が使用されます。日付けフィールドの一部が省略された場合は,省略された値は現在の日付の対応する値になります。時刻フィールドの一部が省略された場合は,省略された値は 0 になります。時刻値の指定についての詳細は,『Compaq OpenVMS ユーザーズ・マニュアル』,またはオンライン・ヘルプの DCL_Tips トピック (Date_Time サブトピック) を参照してください。
入力時刻引数がデルタ時間の場合は, 出力時刻形式引数として DELTA を指定しなければなりません。
出力時刻形式
戻される情報の時刻形式を指定します。出力時刻形式引数は,次のいずれかの文字列を指定します。
ABSOLUTE 要求された情報が,絶対時刻形式( dd-mmm-yyyy hh:mm:ss.cc) で戻されるように指定します。 dd が 1 桁の場合,先行の 0 や空白文字は戻されません。 COMPARISON
(省略時の設定)要求された情報が, yyyy-mm-dd hh:mm:ss.cc という形式で戻されるように指定します。 DELTA 要求された情報が,デルタ形式 dddd-hh:mm:ss:cc で戻されるように指定します。 出力時刻形式引数として DELTA を指定する場合には,入力時刻引数に対してもデルタ時間を指定しなければなりません。
出力フィールド
次のいずれか 1 つ(短縮できません)を含む文字列式を指定します。 DATE,MONTH,DATETIME (省略時の設定),SECOND,DAY,TIME,HOUR,WEEKDAY, HUNDREDTH,YEAR,MINUTE。情報は,出力時刻形式引数に指定した時刻形式で戻されます。 入力時刻引数がデルタ時間で, 出力時刻形式引数が DELTA の場合は, MONTH,WEEKDAY,または YEAR は指定できません。曜日が戻される場合は,最初の文字は大文字でそれ以降の文字は小文字です。
F$CVTIME 関数を使用する場合, (最後の引数の右に指定する) オプションの引数は省略できますが,最後に指定する引数の左の引数を省略する場合は,コンマ (,) は省略できません。絶対時刻,または複合時刻形式で入力時刻引数を指定した場合は, 出力時刻形式引数として ABSOLUTE や COMPARISON は指定できますが, DELTA は指定できません。
デルタ時間形式で 入力時刻引数を指定した場合は, 出力時刻形式引数として DELTA を指定しなければなりません。
#1 |
---|
$ TIME = F$TIME() $ SHOW SYMBOL TIME TIME = "14-DEC-2001 10:56:23.10" $ TIME = F$CVTIME(TIME) $ SHOW SYMBOL TIME TIME = "2001-12-14 10:56:23.10" |
この例では F$TIME 関数を使用して,文字列としてシステム時刻を戻し,その時刻を TIME というシンボルに割り当てています。次に,F$CVTIME関数を使用して,システム時刻を別の時刻形式に変換しています。 TIME はシンボルなので,この引数を引用符 (" ") で囲む必要はありません。レキシカル関数に対する引数としてシンボルが使用された時,シンボルは自動的に評価されます。
この結果,求められた文字列を使って, 2つの日付を比較できます ( .LTS.演算子と .GTS.演算子を使用します)。たとえば,F$CVTIME を使用すれば,2つの時刻文字列を変換し,その結果を TIME_1 と TIME_2 というシンボルに格納できます。そのあと,2つの値を比較し,次に示されているように結果にもとづいてラベルに分岐させることができます。
$ IF TIME_1 .LTS. TIME_2 THEN GOTO FIRST
#2 |
---|
$ NEXT = F$CVTIME("TOMORROW",,"WEEKDAY") $ SHOW SYMBOL NEXT NEXT = "Tuesday" |
この例では,F$CVTIME 関数は "TOMORROW" という絶対時刻キーワードに対応する曜日を戻します。 "TOMORROW" と "WEEKDAY" という引数は,引用符で囲まなければなりません。これらの引数は,文字列式だからです。また,省略する 出力時刻形式引数に対しては,省略したことを示すために,プレースホルダとしてコンマを指定しなければなりません。
文字データからビット・フィールドを取り出し,その結果を符号なし値として整数に変換します。
F$CVUI (開始ビット, ビット数, 文字列)
開始ビット
取り出される最初のビットのオフセットを指定します。文字列の下位(右端)ビットは,オフセットでの位置番号 0 です。オフセットは整数式で指定します。負の値を持つ式や,文字列に含まれるビット数を越える値を持つ式を指定した場合, DCL は INVRANGE というエラー・メッセージを表示します。
ビット数
整数値に変換するために取り出されるビット文字列の長さを指定します。ここで指定する値は,文字列引数のビット数以下でなければなりません。負の値を持つ式を指定した場合や,ビット位置オフセットに加算すると誤った値になる式を指定した場合は, DCL は INVRANGE というエラー・メッセージを表示します。
文字列
編集する文字列を指定します。
#1 |
---|
$ A[0,32] = %X2B $ SHOW SYMBOL A A = "+" $ X = F$CVUI(0,4,A) $ SHOW SYMBOL X X = 11 Hex = 0000000B Octal = 00000000013 |
この例では,算術オーバーレイを使用して,シンボル A の 32 ビットすべてに 16 進数の 2B を割り当てています。シンボル A は未定義状態のため,オーバレイが実行されたあと,このシンボルには,文字列値が割り当てられます。 (シンボルが未定義の場合には,算術オーバレイの結果として文字列値が割り当てられます。シンボルがすでに定義されていた場合には,オーバレイが実行されたあと,そのシンボルは同じデータ・タイプのままです。) 16 進数の 2B は,ASCII の "+" に対応します。
次に F$CVUI 関数がシンボル A から下位 4 ビットを取り出します。下位4ビットには,16 進数値 B の 2進表現が含まれています。これらのビットは,符号なし値として整数に変換されます。変換後の 11 という値が,シンボルX に割り当てられます。
選択基準に合う装置名をすべて返します。装置名はランダムな順序で返されます。
F$DEVICE ([検索する装置名], [装置クラス], [装置タイプ], [ストリームid])
検索する装置名
検索する装置名を文字列で指定します。ワイルドカード (* と %) 文字を使用できます。検索する装置名引数は,文字列式として指定します。
装置クラス
検索する装置クラスを指定します。 装置クラス引数は,有効な装置クラス名に対応する文字列式として指定します。詳細は,レキシカル関数 F$GETDVI の DEVCLASS 項目を参照してください。
装置タイプ
検索する装置タイプを指定します。 装置タイプ引数は,有効なタイプ名に対応する文字列式として指定します。詳細は,レキシカル関数 F$GETDVI の DEVTYPE 項目を参照してください。
注意
装置クラスを指定せずに装置タイプを指定すると,エラーになります。
ストリーム id
検索ストリームを示す正の整数値F$DEVICE関数を 2回以上使用し,異なる選択基準引数を指定する場合,検索ストリーム識別番号を使用して,それぞれの検索コンテキストを管理します。コマンド・プロシージャの中で,F$DEVICE関数を2回以上使用し,異なる選択基準指定引数を指定した場合には,各検索を別々に識別するために,ストリーム id 引数を指定しなければなりません。
装置名リストを最後まで読み出す前に選択基準を変更した場合は,コンテキストは再初期化され検索はまた先頭から開始されます。
ストリーム id 引数を省略すると, F$DEVICE関数は検索ストリームが1つであると解釈します。つまり,異なる選択基準引数を指定するたびに,先頭から検索を開始します。
F$DEVICE 関数を使用すると, $DEVICE_SCAN システム・サービスを使用することにより,ある選択基準を満たす装置を検索できます。F$DEVICE 関数では,装置名に基づいた検索に限り,アスタリスク (*) およびパーセント記号 (%) ワイルドカード文字を使用できます。装置クラス,または装置タイプを指定する場合は,有効な文字列式を指定しなければなりません。
コマンド・プロシージャのループ内で F$DEVICE 関数を使用して,指定した選択基準に対応する装置名を戻すことできます。 F$DEVICE 関数を実行する毎に,基準に合った次の装置名を戻します。装置名はランダムな順序で戻されます。基準にあった装置をすべて戻すと,F$DEVICE 関数は空文字列を戻します。
明示的に (ストリームid 引数を指定して),または暗黙に (ストリームid引数を省略して) ,検索文字列のコンテキストを管理しなければなりません。どちらの場合も, 同一のストリーム (明示的あるいは暗黙的) で F$DEVICE システム・サービスを実行する毎に同じ選択基準を指定しなければなりません。
#1 |
---|
$ START: $ DEVICE_NAME = F$DEVICE("*0:","DISK","RA60") $ IF DEVICE_NAME .EQS. "" THEN EXIT $ SHOW SYMBOL DEVICE_NAME $ GOTO START |
ユニット番号 0 の RA60 をすべて表示するコマンド・プロシージャです。
ストリームid引数が指定されていないので, F$DEVICE は暗黙の検索ストリームを使用します。選択基準を変更していないので,装置名が順番に返されます。選択基準に合った最後の装置名を表示した後, F$DEVICE 関数は空文字列を返しコマンド・プロシージャを終了します。
現在の省略時のディレクトリ名文字列を戻します。 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 関数を使用しています。
前へ | 次へ | 目次 | 索引 |