連番のファイルで欠番がある場合

8 views (last 30 days)
Jun
Jun on 28 Dec 2018
Commented: Kazuya on 28 Dec 2018
ワークスペースにある連番の構造体(PLV_001、PLV_003、、、、、、PLV_023)を順に呼び出します。次に、
TFという要素(1000*1*8)を読み出し、squeezeをして(1000*8)、3次元方向にファイルを順に並べるということをしようと思っています。
が、1つ問題があり、連番の構造体には時々欠番があります。上記でいうと、PLV_002がありません。するとエラーが出ます
これをスルーする方法はあるでしょうか。ご教授ください。
*******
clear
clc
nfile = 19; % number of filels
plv = [];
load PLV.mat %PLV.matに構造体が保存されている。
for cnt=1:nfile
dname = sprintf('PLV_00%d',cnt);
data = strcat(dname,'.TF');
file = eval(data);
file2 = squeeze(file);
plv = cat(3,plv,file2);
end

Accepted Answer

Kazuya
Kazuya on 28 Dec 2018
  1. exist 関数でその変数が存在するかどうかのチェック
  2. ワークスペースに存在する変数を who 関数でリストする
の2通り思いつきました。1 の方が、確実かな・・?試してみてください。
例1:
clear
clc
nfile = 19; % number of filels
plv = [];
load PLV.mat %PLV.matに構造体が保存されている。
for cnt=1:nfile
dname = sprintf('PLV_00%d',cnt);
if exist(dname,'var') % 'var' で変数の有無だけをチェック
data = strcat(dname,'.TF');
file = eval(data);
file2 = squeeze(file);
plv = cat(3,plv,file2);
end
end
例2:
clear
clc
nfile = 19; % number of filels
plv = [];
load PLV.mat %PLV.matに構造体が保存されている。
varlists = who('PLV*') % 変数リストをセル配列で取得
for cnt=1:length(varlists)
dname = varlists{cnt};
data = strcat(dname,'.TF');
file = eval(data);
file2 = squeeze(file);
plv = cat(3,plv,file2);
end
  3 Comments
Jun
Jun on 28 Dec 2018
例2のほうですべて解決しました。
ありがとうございました。
Kazuya
Kazuya on 28 Dec 2018
dname = sprintf('PLV_00%d',cnt);
で 0 が 2つ存在するファイル名になっているのが原因ですね。 cnt = 10 の時、変数名 PLV_0010 を探す処理になっています。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!