SASプログラムファイルを拡張エディタで開き直す方法

SASプログラムをエクスプローラーを介さずに、拡張エディタで開き直す方法を紹介します。
あまりニーズはないかもですが。

スポンサーリンク

開き直す機能って実装されてる?

他のテキストエディタや統合開発環境の多くで提供されている「開き直す」という機能がそもそも存在するか、しないならどうすれば実装できるかを検討しました。

ReOpenFileコマンドは存在しない

まず思いついたのは、ツールバーで実行できないか?です。
つまりSASコマンドでそのような機能が実装されていないかな、ということです。
OpenFileコマンドに対するReOpenFile的な。

ありそうですよね。
でも無いんです。笑
サポートに問い合わせもしましたが、存在しないとのことです。
別に難しくもないので、実装してほしいですね。
まぁ、ニーズがないんでしょうね。

%includeはちょっと違う

次に思いたのが%include
これもファイルを読み込むという意味では同じですが、拡張エディタで開いてほしいので、これもだめです。

DMステートメントなら

最終的にたどり着いたのは、DMステートメントです。
SAS communitiesの回答の一つで初めて知ったステートメント。

DMステートメントとは?

グローバルステートメントの一つで、dmコマンドはSASに対する操作をプログラムをsubmitすることで実行させることができます。
一方で、xコマンドはOSに対する操作をプログラムをsubmitすることで実行させるので異なります。

データステップ100万回で実行例が紹介されています。

開き直す方法

DMステートメントを活用します。
まず指定したパスのSASプログラムファイルを拡張エディタで開くには次のプログラムで実行可能です。

SASプログラムファイルを拡張エディタで開く

dm 'wedit"path-to-program\code1.sas"';

weditの部分が拡張エディタで開くことを意味しています。

逆に今開いているファイルを閉じるには、wincloseとパスを指定すればOKです。

ファイルを閉じる

dm 'winclose"path-to-program\code1.sas"';

これを組み合わせれば、すでに拡張エディタで開いているSASプログラムファイルを開き直すことができます。

SASプログラムファイルを開き直す

dm 'winclose"path-to-program\code1.sas"';;
dm 'wedit"path-to-program\code1.sas"';

最初のwincloseでセミコロン2つとしているのはこれをまとめて実行した際のエラーを回避するためです。
なぜ起きるのか、逆になぜ2つにしたら回避できるのかは不明です。

SASプログラムファイルを開く&開き直すマクロ

マクロにするとこんな感じです。

SASプログラムファイルを開く&開き直すマクロ

/* 指定ファイルを拡張エディタで開く */
%macro OpenFile(path=);
	dm 'wedit"&path";';
%mend;
%OpenFile(path=path-to-program\code1.sas);

/* 指定ファイルを拡張エディタで開き直す */
%macro ReOpenFile(path=);
	dm 'winclose"&path"';;
	dm 'wedit"&path";';
%mend;
%ReOpenFile(path=path-to-program\code1.sas);

まとめ

DMステートメントを使って、プログラムファイルをエクスプローラーを介さずに開き直す方法を紹介しました。
何で開き直すというコマンドがないのでしょうか。
プログラムエディタならあってもおかしくないと思うのですが…。

スポンサーリンク