むかし、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に渡す引数にだけ気を付ければもう少し簡単にできそう。
こんな感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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を使ってこんな風でも良いんじゃないでしょうか。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 件のコメント:
コメントを投稿