見出し画像

MATLABでファイル選択画面を開く方法


ファイル選択画面

MATLABでMATファイルやcsvファイルなどを読み込む際、ファイルのパスがあらかじめ分かっている場合は、そのパスを指定すれば良いが、パスを毎回設定するのも面倒い。
そこで、ファイル選択ダイアログを開いて、ファイルを選択するだけでパスを取得することができる方法がある。
uigetfile関数は、ファイル選択ダイアログを開くための関数である。
基本的な使い方は、

filename = uigetfile;

である。
filenameには、ファイル名が拡張子付きで取得できる。

コードを実行すると、すべてのMATLABファイルを選択することができる。
拡張子が .m、 .mat などである。

図1 選択ダイアログ(Macの場合)

Macの場合は、選択できるファイルのみが、黒字で表示される。
選択できないファイルは、薄くなっている。

図2 選択ダイアログ(Windowsの場合)

Windowsの場合は、MATLABファイル以外は、表示されない。右下をみると、すべてのMATLABファイルのみが選択可能になっている。

なお、この選択ダイアログは、OSによる。

拡張子の指定

読み込めるファイルの拡張子を指定するには、

filename = uigetfile('*.xlsx');

とする。この場合は、すべてのエクセルファイルを選択できる。
ファイル名の部分は、*にすることで、すべてを表す。
拡張子は、読み込みたいファイルの拡張子を指定すると良い。
拡張子を複数指定する場合は、

filename = uigetfile({'*.m';'*.xlsx'});

とする。この場合は、mファイルとエクセルファイルを指定している。
Macの場合は、OSの世代などによっても異なり、CatalinaやSonomaなどでは、拡張子を複数指定する機能はうまく動作しない。1つであれば、動作する。

図3 拡張子複数(Windowsの場合)

図3の右下をみると指定した拡張子が選択できるようになっている。
エクセルを選ぶと、

図4 エクセル選択時

図4のようにエクセルが表示される。

ファイルパスの取得

ファイルパスを取得するには、

[filename, path] = uigetfile();

とする。pathには、ファイルが保存されているフォルダーのパスが取得できる。

ファイルを複数選択する

ファイルを複数同時に選択する場合には、

 [filename, path] = uigetfile('*xlsx',"MultiSelect","on");

とする。"MultiSelect"が複数選択するかどうかを制御している。

ファイルを選択しなかったときの戻り値

[filename, path] = uigetfile();

選択ダイアログを開いて、キャンセルを押すと、戻り値は0となる。これによって、ファイルが選択されたかどうかを判断できる。

load関数と組み合わせる

ファイル選択した後は、関連記事のMATファイルを読み込む方法で使用したようなload関数やreadmatrix関数、readtable関数でファイルを読み取る操作がほとんどであると思われる。そこで、load関数を例に組み合わせる方法を見ていく。

% ファイルの読み込み
[filename, path] =  uigetfile('*.mat',"MultiSelect","on");
strfilename = string(filename);

% ファイルのあるパスに移動して読み込み
oldfolder = cd(path);
for i = 1:numel(strfilename)
    load(strfilename(1,i));
end
cd(oldfolder);

この例では、load関数でmatファイルを読み込んでいる。
1番簡単な方法は、pathの場所に一時的に、フォルダーを移動して、filenameだけで読み込めるようにする方法である。読み終わった後は、元のフォルダーに戻る。
フォルダーを移動しない場合には、loadするときにpathとfilenameを結合する必要がある。
また、load関数には、string型を渡す必要があるので、string関数でstring配列に変更している。
これは、あくまでも一例なので、参考までに。

以下、公式ドキュメント

関連記事

MATLABでMATファイルを読み込む方法
https://note.com/elemag/n/n4fb94c0b88d0?sub_rt=share_pw

サイト

https://sites.google.com/view/elemagscience/%E3%83%9B%E3%83%BC%E3%83%A0


この記事が気に入ったらサポートをしてみませんか?