前のページ|次のページ

マクロクォーティングを実行するその他の関数

文字Qで始まる関数

次に示す一部のマクロ関数は、一対で使用できます。これらのうち、一方の関数名は、文字Qで始まります。
  • %SCANと%QSCAN
  • %SUBSTRと%QSUBSTR
  • %UPCASEと%QUPCASE
  • %SYSFUNCと%QSYSFUNC
マクロ関数は、引数がマクロクォーティング関数によってマスクされた場合でも、デフォルトでクォーティング解除された結果を返します。そのため、Qxxx関数が必要になります。%QSCAN関数、%QSUBSTR関数、%QUPCASE関数、%QSYSFUNC関数は、実行時に返される値をマスクします。マスクされた項目は、%NRBQUOTE関数によってマスクされた項目と同じになります。

%QSCAN関数の使用例

次のマクロでは、%QSCAN関数を使用して、SYSBUFFR(自動マクロ変数で説明されています)の値に含まれる項目を、別のマクロ変数の値として割り当てています。コメント内の番号は、マクロコードの後にある各説明に対応しています。
%macro splitit;
   %put What character separates the values?;  1
   %input;
   %let s=%bquote(&sysbuffr);  2
   %put Enter three values.;
   %input;
   %local i;
   %do i=1 %to 3;  3
      %global x&i;
      %let x&i=%qscan(%superq(sysbuffr),&i,&s); 
4
   %end;
%mend splitit;

%splitit
What character separates the values?
#
Enter three values.
Fischer Books#Smith&Sons#Sarah's Sweet Shoppe 
5
  1. この質問は、入力する値に現れない、%QSCAN関数が使用する区切り文字の入力を要求しています。
  2. %BQUOTE関数を使用してSYSBUFFRの値をマスクすることで、必要な場合、引用符またはかっこを区切り文字として選択できるようにしています。
  3. 反復する%DOループによってSYSBUFFRのセグメントごとにグローバルマクロ変数を作成し、その変数にセグメントの値を割り当てます。
  4. %QSCAN関数の第1引数に渡されるSYSBUFFRの値を、%SUPERQ関数によってマスクしています。これによって、SYSBUFFRの値に対するあらゆる置換が抑制されます。
  5. %QSCAN関数によって、マクロクォーティングされたSYSBUFFRの値のセグメントが返されます。したがって、Sarah's Sweet Shoppeに含まれる一致しない引用符、とSmith&Sonsに含まれる&nameのパターンは、問題を引き起こしません。
前のページ|次のページ|ページの先頭へ