プリプロセッサ組み込み関数

プリプロセッサは、入力テキスト内のプリプロセッサ組み込み関数への参照を、その組み込み関数名がアクティブな場合にのみ実行します。次の表にこの関数の説明を示します。

関数名 利用可能
COLLATE あり得る 256 の文字値を照合順序で 1 つずつ含む、長さ 256 の文字列を返します。
COMMENT 文字式をコメントに変換します。
COMPILEDATE 現在の日時を次の形式で表す文字列を返します。

yyyy mm dd hh mm ss ttt

COMPILETIME 現在の日時を次の形式で表す文字列を返します。

DD MMM YY HH.MM.SS

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 を指定できます。zx の長さを超える場合は、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"

制限事項

COMMENT:

リテラル文字列に /* または */ が含まれている場合に、この記号が /> および </ に置き換えられることはありません。

QUOTE:
リテラル文字列に一重引用符が含まれている場合に、この引用符が 2 つの連続する一重引用符 ('') に置き換えられることはありません。