はじめに
解析を効率化するための方法を検討してみて、
MVCパタンのように、フォルダを
ロジック・結果の表示・個別解析に分けようと考えました。
結果、libs/, results/, experiments/というフォルダを作ることになりました。
今回は、作成された図や変数をresults/に保存していく方法を書きます。
別途ファイル構成についても言及してますのでご覧ください。
解析において僕の考える最強のフォルダ構成 - Qiita
やること
結果をresults/というディレクトリに保存するんですけど、
その際、解析結果ごとに自動的にファイルを整理してくれたら嬉しいですよね。
そんで、results/のしたに、例えば
results/{date}-{experiment_name}
のようなディレクトリを更に作成したい。
作成してかつ、そのディレクトリ名を返り値として返して欲しい(saveするときに使うので。)
これを実装したのが下記。
SourceCode
関数で実装したら、こんな感じ。
function [TargetDir] = setResultDir(FolderName)
if size(strfind(FolderName, '-'),2)==0,
prefix = regexp(FolderName, '^[a-z]+', 'match');
trimmer = strsplit(FolderName, prefix);
FileName = trimmer{2};
strcell = strsplit(FileName, '_');
FolderName = strjoin(strcell, '-')
end
TargetDir = ['./results/' FolderName];
mkdir(TargetDir);
end
想定している使い方は、
例えばexp2014_11_13_generate_spectra.mという
ファイルにおいて保存したい解析結果があるとして、
mfilename % -> 実行ファイル名を返す
DirName = setResultDir(mfilename);
% -> return 2014-11-13-generate-spectra
と書きます。
このDirNameを使って、save先のファイル名を決定してもらえればいいわけです。
mkdir
mkdirによりディレクトリが自動生成されます。
これが、目的の1つ。
ファイル名を置換してディレクトリ名にする
strsplit/strjoinを使って、文字列置換してます。
これが、目的のもう1つ。
.mファイルにはアンダースコアしか使えないのに対して、
画像ファイル、ディレクトリにはハイフンが使えるので、
アンダースコアをハイフンに、
接頭辞のexpを取り除くように書いています。
これとsaveas系の関数を組み合わせれば、
ヘルシーになること間違えなしです!
今日はここまで~