Effacer les filtres
Effacer les filtres

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

4 vues (au cours des 30 derniers jours)
Jun
Jun le 28 Déc 2018
Commenté : Kazuya le 28 Déc 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

Réponse acceptée

Kazuya
Kazuya le 28 Déc 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 commentaires
Jun
Jun le 28 Déc 2018
例2のほうですべて解決しました。
ありがとうございました。
Kazuya
Kazuya le 28 Déc 2018
dname = sprintf('PLV_00%d',cnt);
で 0 が 2つ存在するファイル名になっているのが原因ですね。 cnt = 10 の時、変数名 PLV_0010 を探す処理になっています。

Connectez-vous pour commenter.

Plus de réponses (0)

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!