質問: ### 前提・実現したいこと カレントディレクトリのcsvを読み込んで解析結果を同じディレクトリに吐き出すプログラムを使用しています。 恥ずかしながら手動でディレクトリを移動させて毎度毎度実行をしているためかなり無駄なことをしているなと自負しております。 (先輩方が代々引き継いだプログラムのようです) 解析するデータを一通り処理し終えたので来年度ではこのようなことをしないために連続で処理したく思います。 ### 構想 個人的には処理するプログラムをなるべく書き換えたくありません。 被験者のデータが個人で分けられており、一人当たり二回の計測データを持っているので 01.○○(名前)の下に1回目、2回目のフォルダがあってこの被験者フォルダが連番で連なっている形になっています。 (markdownに慣れていないのでわかりにくくて申し訳ありません) カレントディレクトリを実行するたび変えていくプログラムを外に作るのがいいかと思うのですが、うまく書けません。if構文の考え方の指針などご教授願えませんでしょうか。 ### 補足情報(言語/FW/ツール等のバージョンなど) MATLAB 2017a
回答: 01.○○(名前)、02.○○(名前)などのフォルダは、同一のフォルダ配下にあると仮定します。 ここでは、そのフォルダの名前をdata_folderとしておきます。 01.○○(名前)配下の1回目のフォルダ、2回目のフォルダそれぞれにcsvがいくつあるかわからないので、ここでは複数個あると想定しておきます。 大まかな手順: 0: data_folderの絶対パスを調べる。 1: プログラムのあるフォルダをカレントに設定する。 2: csvファイルへの絶対パスを取得してデータをworkspaceにロードする。 3: プログラムを実行する。 4: 2と3を繰り返す。 準備 MATLABを起動し、プログラムのあるフォルダをcurrentに設定。 data_folderの絶対パスを調べて、エディタにコピーし、folderに格納。 例:folder='C:\Users\humekuru\MATLAB\data_folder'; 準備が整ったら、以下を実行してみてください。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ``` % data_folder配下の全個人用フォルダ名を取得 d = dir(folder);d={d([d(:).isdir]).name};d(ismember(d,{'.','..'}))=[]; %% for k=1:length(d) dd = dir(fullfile(folder,d{k})); % 個人用フォルダd{k}配下のデータフォルダ名を取得する。 dd={dd([dd(:).isdir]).name};dd(ismember(dd,{'.','..'}))=[]; for kk=1:length(dd) ddd = dir(fullfile(folder,d{k},dd{kk},'*.csv')); for kkk=1:length(ddd) path_to_csv = fullfile(folder,d{k},dd{kk},ddd(kkk).name);%<--変更 %path_to_csv = fullfile(ddd(kkk).folder, ddd(kkk).name);% <-- オリジナル % csvへのパスが正しいか目で念のため確認。必要なければ削除。 disp(path_to_csv) % csvを読み込んで処理 M=csvread(path_to_csv); your_function(M); % <----- データに対する処理部分 end end end ``` %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%