2016年6月19日日曜日

文字分割は、python使ったほうが楽?

pythonでのコーディングは便利でいいですが、やはりmelにはmelの良さがあるし、melのほうが手っ取り早いこともあります。

ただ、melはやっぱりpythonと比べると、文字分割関連がめんどくさい…。

たとえば、文字列…

"aaa/bbb/ccc.bmp"

で、"bbb"を抜き出したい場合、おそらく普通にmelでコーディングすると…


string $temp[] = stringToSTringArray("aaa/bbb/ccc.bmp","/");
string $result = $temp[1] ;

など、stringToStringArrayを使わない場合でも、一度配列に出してから抜き出さないと、だと思います。

今日試してみたのが、pythonを挟む方法です。

string $result = python('aaa/bbb/ccc.bmp'.split('/')[-2]);

…一行で済むというね!


しばらくこちらを試してみようと思います。

pythonソース もう一度importするには??

melのsourdeと違って、pythonの場合、ソースを更新して再度importコマンドを行っても更新されることがありません。
この場合、reload()関数を使うと解決できます。

reload関数()

ほかにも、読み込んだモジュールを削除して再度importする方法を採用している方もいるようです。

.pyファイルの再import

とくにもんだいなければ、reload関数を使うのがよさそうです。

2016年6月17日金曜日

melで、指定パス以下のフォルダ・ファイル階層を取得する。

子供が熱でた~ … ということで、家で作業しております。

Toolを作っている際、データ集合をフォルダ階層に分けて管理・Tool上にそのツリーを表示したい…などというケースは少なくないと思います。

簡単ですが、再帰処理による、「指定パス以下のフォルダ・ファイル階層を取得するmel」を作成しました。
メモ代わりに貼り付けます。
proc string[] GetFileListByPath(string $path){
string $fileList[] = `getFileList -fld $path`;
string $returnList[];
for($data in $fileList){
$data = $path+$data;
if(`filetest -f $data`) $returnList[size($returnList)]=$data;
if(`filetest -d $data`) $returnList = stringArrayCatenate($returnList,`GetFileListByPath($data+"/")`);
}
print $returnList;
return $returnList;
}
treeListerかなんかでフォルダを列挙したいときなんか便利かも。

2016年6月12日日曜日

任意のフォルダのpythonファイルをimport コマンドから持ってくる

Toolのソースを、特定のフォルダの特定階層に整理したいのに、melファイルのsourceコマンドとは違って、pythonのimportコマンドは、あらかじめpythonパスが通っているところしか見てくれない。

そういう場合は、環境変数に書き込むか、一時的リリースのToolなんかだったら、一時的にpythonパスをソースから追加することでインポートが可能です。

サンプルソース;
import sys
def append_PythonPath(PyPath=None):
sys.path.append(PyPath)
append_PythonPath('任意のパス')
これでpythonパスを一時的に追加できるので、この後importコマンドを走らせればいい