むかし、MELの保存先を調べるとか書いたのですが、スクリプトごとに記述しているため、なんか冗長なんですよねぇ。
なので、もう少し簡略化できないかと書き換えてみることにしました。
whatIsコマンドは、
- ビルトインの「Command」
- 「Mel procedure found in: MEL Path」
- 「Script found in: MEL Path」
- 変数の 「TYPE variable」
- どれにも当てはまらない「Unknown」
のどれかが string型で返ってきます。
このうち欲しいのは 2.か
3.で、呼び出している自作のMELコマンドからパスを確認しようとしているわけなので、1,4,5は返ってこないはずです。
なので、whatIsに渡す引数にだけ気を付ければもう少し簡単にできそう。
こんな感じです。
proc string _getMyPath( string $self ) { string $file =`whatIs $self`; string $tmp[]= python("'"+$file+"'.split(' ')"); return (`dirname ($tmp[size($tmp)-1])`+"/"); } global proc hoge() { string $path = _getMyPath("hoge"); print("\n\""+$path+"\"\n"); }
pythonコマンドを使っていますが、tokenizeを使ってこんな風でも良いんじゃないでしょうか。
proc string _getMyPath( string $self ) { string $file =`whatIs $self`; string $tmp[]; int $t = tokenize($file," ",$tmp); return (`dirname ($tmp[$t-1])`+"/"); } global proc hogehoge() { string $path = _getMyPath("hogehoge"); print("\n\""+$path+"\"\n"); }
どちらもwhatIsコマンドの戻り値を空白で分割して、最後の部分だけを使うという処理。
dirnameに渡すときの、配列番号を指定する sizeコマンドの記述には、ちょっと慣れが必要なので tokenize を使ったほうが易しめ。
いま思うと、なんで substitute 使っていたんだという感じなんですが・・・。
だいぶ簡略化できたと思います。
0 件のコメント:
コメントを投稿