LoginSignup
6
5

More than 5 years have passed since last update.

Matlabでヘルシーに解析結果を保存する

Last updated at Posted at 2014-11-18

はじめに

解析を効率化するための方法を検討してみて、
MVCパタンのように、フォルダを
ロジック・結果の表示・個別解析に分けようと考えました。

結果、libs/, results/, experiments/というフォルダを作ることになりました。
今回は、作成された図や変数をresults/に保存していく方法を書きます。
別途ファイル構成についても言及してますのでご覧ください。
解析において僕の考える最強のフォルダ構成 - Qiita

やること

結果をresults/というディレクトリに保存するんですけど、
その際、解析結果ごとに自動的にファイルを整理してくれたら嬉しいですよね。

そんで、results/のしたに、例えば
results/{date}-{experiment_name}
のようなディレクトリを更に作成したい。
作成してかつ、そのディレクトリ名を返り値として返して欲しい(saveするときに使うので。)

これを実装したのが下記。

SourceCode

関数で実装したら、こんな感じ。

setResultDir.m
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という
ファイルにおいて保存したい解析結果があるとして、

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系の関数を組み合わせれば、
ヘルシーになること間違えなしです!

今日はここまで~

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5