필터 지우기
필터 지우기

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

조회 수: 4 (최근 30일)
Jun
Jun 2018년 12월 28일
댓글: Kazuya 2018년 12월 28일
ワークスペースにある連番の構造体(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

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 ファイルの操作에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!