- exist 関数でその変数が存在するかどうかのチェック
- ワークスペースに存在する変数を who 関数でリストする
連番のファイルで欠番がある場合
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
ワークスペースにある連番の構造体(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
0 commentaires
Réponse acceptée
Kazuya
le 28 Déc 2018
の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 commentaires
Kazuya
le 28 Déc 2018
dname = sprintf('PLV_00%d',cnt);
で 0 が 2つ存在するファイル名になっているのが原因ですね。 cnt = 10 の時、変数名 PLV_0010 を探す処理になっています。
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur ファイルの操作 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!