2012年7月19日木曜日

InstallAware RAD Studio Editionでインストーラ作成

作業するマシンが度々変わるとバイナリの置き場所がバラバラになるので、SAS Log Utilityのインストーラを、InstallAwareで作ってみました。InstallAwareは、Delphi XE2 Proに使用権が含まれている製品です。細かい設定を使いたければ、999ドルのDeveloper版にアップデートしないといけません。


悩ましいのがEULAの記述です。英語で適当なサンプルを探していますが、やたらと長かったり、米国の特定の州が云々という文言が入っていたりします。フリーウェアとして、コンパクトで分かりやすいEULAを捜し歩いています。


2012年7月17日火曜日

MPRINT無しでマクロ名を得ることはできるか?

SAS Log Utilityの改良ネタを考えたけどボツ案です。
現在、ツールの仕様はMPRINTのオプションを付けないと、マクロ名を拾ってくれません。ひょっとして、デフォルトのオプションのままでもマクロ名を取得できるかもしれないと思いましたがNGです。

下のログは、行番号19の後ろのマクロ名を捕捉します。

8    %macro foo(in_ds);
9        proc sort data=&in_ds out=class;
10           by name;
11       run;
12
13       data class;
14           set work.class;
15           keep name;
16       run;
17   %mend;
18
19   %foo(sashelp.class)

NOTE: データセットSASHELP.CLASSから19オブザベーションを読み込みました。
NOTE: データセットWORK.CLASSは19オブザベーション、5変数です。
NOTE: PROCEDURE SORT処理(合計処理時間):
      処理時間           0.04 秒
      CPU時間            0.01 秒



NOTE: データセットWORK.CLASSから19オブザベーションを読み込みました。
NOTE: データセットWORK.CLASSは19オブザベーション、1変数です。
NOTE: DATAステートメント処理(合計処理時間):
      処理時間           0.26 秒
      CPU時間            0.01 秒


以下のログの場合は、マクロで囲まれていないプロシージャです。行番号の後にマクロ名称が無ければ、マクロの外側と判断できるのではないでしょうか?
1    proc sort data=sashelp.class out=class2;
2        by name;
3    run;

NOTE: データセットSASHELP.CLASSから19オブザベーションを読み込みました。
NOTE: データセットWORK.CLASS2は19オブザベーション、5変数です。
NOTE: PROCEDURE SORT処理(合計処理時間):
      処理時間           0.04 秒
      CPU時間            0.03 秒


行番号 %マクロ名;がマクロの開始、行番号 RUN又はQUIT;でマクロを抜けたことを判定できそうです。しかしながら、マクロが入れ子になっていると外側のマクロ名しか拾えません。継続して検討しますが、無理そうです。