OpenVMS
DCL ディクショナリ


前へ 次へ 目次 索引


F$FAO

$FAO システム・サービスを呼び出し,指定された制御文字列を, ASCII 形式に整えられた出力文字列に変換します。書式を指定して,整数値を文字列に変換したり,キャリッジ・リターンやフォーム・フィードを挿入したり,テキストを挿入したりできます。

形式

F$FAO (制御文字列[,引数[,...]])

戻り値


ASCII 形式で出力される文字列。この出力文字列は,制御文字列の固定テキストと FAO ディレクティブから作成されます。

引数

制御文字列

出力文字列の固定テキストと FAO ディレクティブを結合したものです。制御文字列の長さは任意であり, FAO ディレクティブをいくつでも含むことができます。制御文字列では,文字列式として指定します。

F$FAO 関数は,FAO ディレクティブを使用して,ASCII 形式のデータを変更したり,制御文字列中の固定テキストに割り当てたりします。

表 DCLI-4 は制御文字中で指定する FAO ディレクティブを示しています。

引数[,...]

制御文字列中の FAO ディレクティブに対する 1 〜 15 の引数。引数は,整数式または文字列式として指定します。 表 DCLI-4 は,各 FAO ディレクティブと必要な引数タイプを示しています。

FAO ディレクティブは 1 つまたは複数の引数を必要とすることがあります。その順序は,制御文字列のものと正確に一致しなくてはなりません。そうでない場合でも,エラー・メッセージは出力されません。

対応するディレクティブに対して指定可能なタイプ ( 整数または文字列 ) ではない引数を指定すると,予測できない結果が戻されます。 F$INTEGER や F$STRING を使用して適当な型に変換してください。

引数に不足がある場合,F$FAO は引数リストを越えて読もうとします。そのため,制御文字列のディレクティブに一致する引数を必ず指定してください。

対応するディレクティブに対して指定可能なタイプ ( 整数または文字列 ) ではない引数を指定すると,コマンドが実行されなかったという予測できないエラーになります。このエラーは,$FAO システム・サービスからのものそのままです。


説明

$FAO システム・サービスを起動し,文字および数値入力を ASCII 文字列に変換します (FAO は formatted ASCII output の略です)。書式を指定して,整数値を文字列に変換したり,キャリッジ・リターンやフォームフィードをテキストを挿入したり,テキストを挿入したりできます。

以下のフォーマットを使用して FAO ディレクティブを指定します。

フォーマット 機能
!DD 1 つのディレクティブです。
!n(DD) 指定した回数を繰り返します。
!lengthDD 指定した長さのフィールドに出力します。
!n(lengthDD) 指定した回数を繰り返し,指定した長さのフィールドに出力します。

感嘆符 (!) は,それ以降の文字または文字列が FAO ディレクティブとして解釈されることを示しています。 DD は F$FAO が実行するためのアクションであることを示す, 1 つまたは 2 つの大文字のコードを表しています。繰り返し数を指定する場合, n はディレクティブが繰り返される回数を指定する 10 進数です。 length 値は,"length" 文字の出力フィールドを表わすために F$FAO に指示する 10 進数です。

繰り返し回数と出力の長さは,絶対数ではなく, (#) を使用して指定することもできます。 (#) を使用した場合は,引数リストの相当する位置に整数式として数値を指定します。

変数出力フィールドを繰り返し回数で指定すると,長さパラメータは 1 つだけ必要です。これは,各出力文字列はそれぞれ長さを指定しているからです。

FAO ディレクティブは以下のカテゴリでグループ化されます。

表 DCLI-4 は, FAO ディレクティブと必須の引数タイプを示しています。次の節では文字列挿入, ゼロ埋め込み数値変換,および空白埋め込み数値変換を実行するディレクティブの出力文字列を説明します。

注意

$FAO システム・サービスではサポートされていますが, DCL F$FAO レキシカル関数ではサポートされていない 2 つのタイプのディレクティブがあります。その 2 つのタイプを次に示します。

  • クォドワード数値ディレクティブ ( Q, H, および J )。すべての DCL 数値はロングワードとして格納されるので,DCL ではサポートされません。

  • !AS ディレクティブ以外の文字列ディレクティブ。すべての DCL 文字列は記述子として格納されるので,DCL ではサポートされません。

$FAO システム・サービス・ディレクティブについての詳細は『OpenVMS System Services Reference Manual』を参照してください。

表 DCLI-4 FAO ディレクティブの要約
ディレクティブ 引数の型 説明
文字列挿入:
!AS 文字列 文字列をそのまま挿入する。
     
ゼロ埋め込み数値変換:
!OB 整数 バイトから8進数表現に変換する。
!OW 整数 ワードから8進数表現に変換する。
!OL 整数 ロング・ワードから8進数表現に変換する。
!XB 整数 バイトから 16 進数表現に変換する。
!XW 整数 ワードから 16 進数表現に変換する。
!XL 整数 ロング・ワードから 16 進数表現に変換する。
!ZB 整数 バイトから 10 進数表現に変換する。
!ZW 整数 ワードから 10 進数表現に変換する。
!ZL 整数 ロング・ワードから 10 進数表現に変換する。
     
空白埋め込み数値変換:
!UB 整数 負数調整なしにバイトから 10 進数表現に変換する。
!UW 整数 負数調整なしにワードから 10 進数表現に変換する。
!UL 整数 負数調整なしにロング・ワードから 10 進数表現に変換する。
!SB 整数 負数変換してバイトから 10 進数表現に変換する。
!SW 整数 負数変換してワードから 10 進数表現に変換する。
!SL 整数 負数変換してロング・ワードから 10 進数表現に変換する。
     
特殊編集:
!/ None キャリッジ・リターンとライン・フィードを挿入する。
!_ None タブを挿入する。
!^ None フォーム・フィードを挿入する。
!! None 感嘆符(!)を挿入する。
!%I 整数 ロング・ワードの整数を名前形式の UIC 形式 [グループ識別子,メンバ識別子] に変換する。
!%S None 最近変換された数値が 1 でないとき"S" を挿入する。 (マルチ・リンガル製品で使用することは推奨しません。)
!%U 整数 ロング・ワードの整数を数値 UIC 形式[g,m] に変換する。ここで g はグループ番号,m はメンバ番号。
    ディレクティブが,かぎかっことカンマを挿入する。
!n<...!> None n 文字のフィールドに,すべてのデータを左詰めし,残りを空白で埋める。
!n* c None c で表現される文字を n 回繰り返する。
!n%C 文字列 最も最近評価された引数の値が n の時,文字列を挿入する(マルチ・リンガル製品で使用する)。
!%E 文字列 最も最近評価された引数が先行するどの !n%C ディレクティブにも一致しない時,文字列を挿入する(マルチ・リンガル製品で使用する)。
!%F None 複数形の終わりにマークする。
!%T 整数 0 現在時刻を挿入する。
!%D 整数 0 現在日付時刻を挿入する。
     
引数の解釈:
!- None 最後の引数を再使用する。
!+ None 次の引数をスキップする。

文字列挿入による出力文字列

!AS ディレクティブは,制御文字列に ( ディレクティブの引数として指定された ) 文字列を挿入します。制御文字列に文字列を挿入した場合,文字列のフィールドの長さは,文字列の長さになります ( これが省略時の設定です )。省略時の長さが明示的に指定したフィールドの長さよりも短い場合は,文字列は左詰めされ,残りは空白で埋められます。省略時の長さが明示的に指定したフィールドの長さよりも長い場合は,文字列の右端は切り捨てられます。

ゼロ埋め込み数値変換による出力文字列

ゼロ埋め込み数値変換のためのディレクティブは,( ディレクティブの引数として指定された ) 整数を,10 進数,8 進数,または 16 進数表現に変換します。整数の ASCII 表現は,制御文字列に挿入されます。変換された引数の省略時の出力フィールドの長さは,以下のように決められます。

バイト変換では引数の 2 進表現の下位 8 ビットのみを,ワード変換では下位 16 ビットのみを使用します。ロングワード変換では,32 ビットすべてを使用します。

空白埋め込み数値変換による出力文字列

空白埋め込み数値変換のディレクティブは,( ディレクティブの引数として指定された ) 整数を 10 進数表現に変換します。これらのディレクティブは,符号付きあるいは符号なしとして整数を変換できます。整数の ASCII 表現は,制御文字列に挿入されます。

変換された引数の出力フィールドの長さは,必要な文字数です ( これが省略時の設定です )。明示的に指定したフィールドの長さよりも値が短い場合は,右詰めされ残は空白で埋められます。明示的に指定したフィールドの長さよりも値が長い場合は,フィールドはアスタリスクで埋められます。

バイト変換では引数の 2 進表現の下位 8 のみを,ワード変換では下位 16 ビットのみを使用します。ロングワード変換では 32 ビットすべてを使用します。

特殊編集による出力文字列

!n%C および !%E ディレクティブは, ( 最後に評価された引数の値をもとにした ) ASCII 文字を出力文字列に挿入します。これらのディレクティブは,不規則な複数の名詞や動詞を挿入するときに便利です。

最後に評価された引数が n と等しい場合は, 2 つのディレクティブ間のテキストは出力文字列に挿入されます。最後に評価された引数が n と等しくない場合は,次の !n%C ディレクティブが実行されます。

n が負数の場合は,引数として指定し(#)を使用しなくてはなりません。

!n%C および !%E ディレクティブを,繰り返し回数で指定することができます。繰り返し回数を指定すると,2 つのディレクティブ間のテキストは指定された回数だけ出力文字列にコピーされます。

%F ディレクティブは複数の文の終わりを示します。


#1

$ COUNT = 57 
$ REPORT = F$FAO("NUMBER OF FORMS = !SL",COUNT) 
$ SHOW SYMBOL REPORT 
  REPORT = "NUMBER OF FORMS = 57" 

このコマンド・プロシージャでは,制御文字列で !SL という FAO ディレクティブを使用することにより, COUNT というシンボルに割り当てられている値が,文字列に変換されます。変換後の文字列は,制御文字列に挿入されます。

COUNT には,57 という整数値が割り当てられています。したがって F$FAO関数は "NUMBER OF FORMS=57" という ASCII 文字列を戻し,この文字列をREPORT というシンボルに割り当てます。

#2

$ A = "ERR" 
$ B = "IS" 
$ C = "HUM" 
$ D = "AN" 
$ PHRASE = F$FAO("TO !3(AS)",A,B,C+D) 
$ SHOW SYMBOL PHRASE 
$ PHRASE = "TO ERRISHUMAN" 

このコマンド・プロシージャでは,A,B,C,および D というシンボルに割り当てられている値を,制御文字列に挿入するために, !AS デイレクティブが使用されています。

!AS ディレクティブに対して,3 という繰り返し回数が指定されているため, F$FAO は 3 つの引数を調べます。この例では,引数にシンボル A ("ERR"),シンボル B ("IS"),および C+D という式 ("HUMAN") が含まれています。これらの文字列引数の値が連結され, "ERRISHUMAN" という文字列が作成されます。

#3

$ A = "ERR" 
$ B = "IS" 
$ C = "HUMAN" 
$ PHRASE = F$FAO("TO !#(#AS)",3,6,A,B,C) 
$ SHOW SYMBOL PHRASE 
$ PHRASE = "TO ERR   IS    HUMAN " 

このコマンド・プロシージャでは,文字列を書式化するために, !AS ディレクティブを指定した F$FAO 関数が使用されています。最初の番号記号 (#) は,最初の引数である 3 によって与えられる繰り返し回数を示しています。2番目の番号記号 (#) は,2 番目の引数である 6 が与えられるフィールド・サイズを示しています。次の 3 つの引数 (A,B,および C)は, !AS ディレクティブが繰り返されるたびに,制御文字列に挿入される文字列を示します。

各引数文字列は,6文字の長さのフィールドに出力されます。各文字列は6文字より短いため,各フィールドは左桁ぞろえされ,右側に空白が挿入されます。この結果,作成された文字列は, PHRASE というシンボルに割り当てられます。

#4

$ OFFSPRING = 1 
$ REPORT = F$FAO- 
("There !0UL!1%Cis!%Eare!%F !-!UL !-!0UL!1%Cchild!%Echildren!%F here",1) 
$ SHOW SYMBOL REPORT 
$ REPORT ="There is 1 child here" 
 

このコマンド・プロシージャでは,!0UL ディレクティブは引数 OFFSPRING を評価しますが,出力文字列に値を挿入しません。!n%C ディレクティブは,その値と引数 OFFSPRING の値が一致するので,"is" という文字列を出力文字列に挿入します。出力文字列の適切な位置に正確な文字が挿入されるよう修正するため,!-!UL ディレクティブは,2回目の引数の評価をします。 !%F ディレクティブは,それぞれの複数文の終わりを示しています。 F$FAO 関数は "There is 1 child here"という ASCII 文字列を返して,それを REPORT というシンボルに割り当てます。


前へ 次へ 目次 索引