2021年2月4日木曜日

MELの保存されているパスを調べる

  むかし、MELの保存先を調べるとか書いたのですが、スクリプトごとに記述しているため、なんか冗長なんですよねぇ。

  なので、もう少し簡略化できないかと書き換えてみることにしました。

  whatIsコマンドは、

  1. ビルトインの「Command
  2. 「Mel procedure found in: MEL Path
  3. 「Script found in: MEL Path
  4. 変数の 「TYPE variable
  5. どれにも当てはまらない「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 件のコメント:

コメントを投稿