プリプロセッサは、入力テキスト内のプリプロセッサ組み込み関数への参照を、その組み込み関数名がアクティブな場合にのみ実行します。次の表にこの関数の説明を示します。
関数名 | 用途 |
---|---|
COLLATE | あり得る 256 の文字値を照合順序で 1 つずつ含む、長さ 256 の文字列を返します。 |
COMMENT | 文字式をコメントに変換します。 |
COMPILEDATE | 現在の日時を次の形式で表す長さ 27 の文字列を返します。
yyyymmddhhmmssttt yyyy は現在の年です。 mm (日付の部分) は現在の月です。 dd は現在の日です。 hh は現在の時間です。 mm (時刻の部分) は現在の分です。 ss は現在の秒です。 ttt は現在の 1/10、1/100、1/1000 の秒を示す 3 桁の数字です。 いずれの部分についても、必要に応じて先頭に 0 が付加され、空白はありません。 例: 20210205171930537 |
COMPILETIME | 現在の日時を次の形式で表す長さ 18 の文字列を返します。
dd_MMM_yy_hh.mm.ss _ は空白文字を表します。 dd は現在の日です。先頭の 0 は空白に置き換えられます。 MMM は現在の月です。JAN、FEB、MAR などの形式になります。 yy は現在の年 (下 2 桁) です。 hh は現在の時間です。 mm は現在の分です。 ss は現在の秒です。 yy、hh、mm、および ss の値が 10 未満の場合は、先頭に 0 が使用されます。 例: 2 FEB 21 17.19.30 この例では、文字列の先頭の 0 が空白に置き換えられていることに注意してください。 |
COPY(x,y) | 文字列 x のコピーを y 回連結して構成される文字列を返します。式 x は CHARACTER 型にする必要があり、それ以外の場合はこの型に変換されます。y は繰り返しの回数を指定する式です。FIXED 型にする必要があり、それ以外の場合はこの型に変換されます。1 以上の値を指定する必要があり、値が 0 の場合は null 文字列が返されます。 |
COUNTER | 10 進数で構成される文字列を返します。返される値は、最初の呼び出しの場合は 00001 で、その後呼び出されるたびに 1 ずつ増えます。 |
DIMENSION(x,y) | x の次元 y の現在の範囲を指定する FIXED 値を返します。配列 x の次元数を y 未満にすることはできません。y は FIXED 型にする必要があり、それ以外の場合はこの型に変換されます。1 以上の値を指定する必要があり、省略すると値は 1 になります。つまり、y を省略できるのは x が 1 次元の場合だけです。 |
HBOUND(x,y) | x の次元 y の現在の上限を指定する FIXED 値を返します。配列 x の次元数を y 未満にすることはできません。y は FIXED 型にする必要があり、それ以外の場合はこの型に変換されます。1 以上の値を指定する必要があり、省略すると値は 1 になります。つまり、y を省略できるのは x が 1 次元の場合だけです。 |
INDEX(x,y,z) | 文字式 y と等しいサブストリングの文字式 x における開始位置を示す FIXED 値を返します。オプションで、処理を開始する x 内の位置 z を指定できます。z が x の長さを超える場合は、0 が返されます。 |
LBOUND(x,y) | x の次元 y の現在の下限を指定する FIXED 値を返します。配列 x の次元数を y 未満にすることはできません。y は FIXED 型にする必要があり、それ以外の場合はこの型に変換されます。1 以上の値を指定する必要があり、省略すると値は 1 になります。つまり、y を省略できるのは x が 1 次元の場合だけです。 |
LENGTH(x) | 指定の文字式 x の現在の長さを指定する FIXED 値を返します。 |
LOWERCASE (x) | A から Z の英字を対応する小文字に変換します。x が CHARACTER 型でない場合はこの型に変換されます。 |
MACCOL | 一番外側のマクロの呼び出しが開始されるソース テキスト内の列を表す FIXED 値を返します。 |
MACLMAR | ソースの左側マージンの列番号を表す FIXED 値を返します。 |
MACNAME | 呼び出し元のプリプロセッサ プロシージャの名前を返します。 |
MACRMAR | ソースの右側マージンの列番号を表す FIXED 値を返します。 |
MAX(x,y) | 複数の式のセットから最大値を返します。式は FIXED 型にする必要があり、それ以外の場合はこの型に変換されます。 |
MIN(x,y) | 複数の式のセットから最小値を返します。式は FIXED 型にする必要があり、それ以外の場合はこの型に変換されます。 |
PARMSET(x) | 指定のパラメーターがプロシージャの呼び出し時に設定されたかどうかを判別するために使用されます。 |
QUOTE(x) | x を有効な引用符付き文字列として表す文字列を返します。 |
REPEAT(x,y) | 文字列 x のコピーを (y + 1) 回連結して構成される文字列を返します。x は CHARACTER 型にする必要があり、それ以外の場合はこの型に変換されます。y は FIXED 型にする必要があり、それ以外の場合はこの型に変換されます。1 以上の値を指定する必要があり、値が 1 の場合は x が返されます。 |
SUBSTR(x,y[,z]) | 文字式 x、開始位置 y、長さ z のサブストリングを返します。 |
SYSADDR | ソースを処理したマクロ プリプロセッサが 32 ビット バージョンか 64 ビット バージョンかを示す文字列「32」または「64」を返します。 |
SYSCHARSET | 有効になっているコンパイル オプションに応じて文字列「ASCII」または「EBCDIC」を返します。 |
SYSDIMSIZE | 4 を返します。この値は、配列の索引の保持に必要な最大バイト数です。 |
SYSENDIAN | リトルエンディアン プラットフォームでは「LITTLE」、ビッグエンディアン プラットフォームでは「BIG」を返します。 |
SYSOFFSETSIZE | 4 を返します。この値は、オフセットの保持に必要なバイト数です。 |
SYSPARM | DEFINE 文によって設定された SYSPARMSTRING の値を返します。 |
SYSPOINTERSIZE | 32 ビット モードの場合は 4、64 ビット モードの場合は 8 を返します。 |
SYSTEM | マクロ プリプロセッサの呼び出し時に指定された -systemxxx オプションを返します。-systemmvs オプションの場合は MVS、-systemims オプションの場合は IMS、-systemcics オプションの場合は CICS を返します。-systemxxx オプションが指定されていなかった場合、Windows では WIN、AIX では AIX、Solaris では SOLARIS、Red Hat Linux および SUSE Linux では LINUX が返されます。 |
SYSVERSION | 製品名、バージョン、リリース、およびモディフィケーション レベルを示す文字列を返します。文字列の長さは 22 で、その形式はシステムによって異なります。AIX の場合は「PL/I for AIX x.y」、Windows の場合は「PL/I for Win* x.y」、z/OS の場合は「PL/I for z/OS Vx.Ry.Mz」です。 |
TRANSLATE(s,t,x) | 文字列 s における指定の文字列 x 内の文字の出現を変換文字列 t 内の対応する変換文字に置き換えて、変換後の文字列を返します。 |
TRIM(x[,y][,z]) | 入力文字列の一方の端または両端から文字を切り取って出力した文字列を返します。 |
UPPERCASE(x) | a から z の英字を対応する大文字に変換します。x が CHARACTER 型でない場合はこの型に変換されます。 |
VARIANT | コマンド ラインで指定された文字列を返します。 |
VERIFY(x,y[,z]) | y にない左端の文字の x 内での位置を示す FIXED 値を返します。処理を開始する x 内の位置 z を指定することもできます。x および y は CHARACTER 型にする必要があり、それ以外の場合はこの型に変換されます。z は FIXED 型にする必要があり、それ以外の場合はこの型に変換されます。0 より大きく、かつ 1 + LENGTH(x) を超えない値を指定する必要があり、値が LENGTH(x) + 1 の場合は結果がゼロになります。デフォルト値は 1 です。 |
例 1。
%ACTIVATE COMPILETIME; %DECLARE TOC CHAR; %TOC = ''''||COMPILETIME||''''; PUT LIST ('COMPILED AT' ||TOC); PUT SKIP;
この例で生成されるテキストは次のようになります。
PUT LIST('COMPILED AT '||' 14 NOV 93 15.53.12'); PUT SKIP;
例 2。
%DECLARE XXX CHAR, COUNTER BUILTIN, I FIXED; %DO I = 1 TO 4; %XXX = 'DECLARE NAME_'|| COUNTER || 'FIXED BIN(31);'; XXX %END;
この例で生成されるテキストは次のようになります。
DECLARE NAME_00001 FIXED BIN(31); DECLARE NAME_00002 FIXED BIN(31) DECLARE NAME_00003 FIXED BIN(31) DECLARE NAME_00004 FIXED BIN(31)
例 3 (SYSADDR)。
fn: proc() options(main); %if sysaddr = 64 %then %do; put skip list ('64 bit'); %end; %else %do; put skip list ('32 bit'); %end; end fn;
例 4 (COMPILEDATE)。
%DCL CD CHAR; %CD = '"' || compiledate() || '"'; put skip list('Compile date is: ' || CD);
例 5 (SYSPARM)。
-define SYSPARM="HELLO WORLD"
コマンド ラインで、次のように返されます。
"HELLO WORLD"
リテラル文字列に /* または */ が含まれている場合に、この記号が /> および </ に置き換えられることはありません。