您可以通過try/catch語句做到這一點,是這樣的:
success = false;
for it1 = 1:range1
for it2 = 1:range2
for it3 = 1:3
filename = strcat(int2str(it1), '_', int2str(it2), '_', int2str(it3), '.mat');
try
load(filename);
success = true;
catch
continue;
success = false;
end
if success
%do some amazing stuff
end
end
end
end
另一種方式來做到這一點是讓所有的.MAT文件並加載它們
files = dir('*.mat');
for file = 1:length(files)
load(files(file).name);
%do some even more amazing stuff
end
如果有其他.mat文件,並且你不想加載它們,那麼你可以使用正則表達式:
files = dir('*.mat');
for file = 1:length(files)
filename = files(file).name;
if regexp(filename, '[1-9][0-9]*_[1-9][0-9]*_[1-3].mat')
load(filename);
%do some even more amazing stuff
end
end
如果你不知道regexp
,它匹配另一個字符串上的字符串模式,您將在MATLAB Doc上找到更多信息。在我的例子,
[1-9]
是任何數字1-9之間
[1-3]
是用3
*
相同意味着先前的字符可以存在一次或多次。所以[0-9]*
是nothing
[0-9]
或[0-9][0-9]
或[0-9][0-9][0-9]
等
你可以找到更多關於MATLAB的正則表達式here
編輯:
我不這樣做,因爲[1-n]
正則表達式的特定語法的。這是一個有點難以解釋,但會盡我所能:
regexp
比賽字符,通過鍵入[1-x]
,我basicly說MATLAB的「我要一個字符的字符代碼爲1的字符代碼和字符代碼之間的x「。所以輸入[1-9]
是有道理的。
另一方面,10或25或高於9的任何數字。讓我們以爲例。 39不是一個字符,它由2個字符組成。所以在正則表達式中匹配39是匹配3,然後9.所以[1-39]
將無法正常工作,但[1-3][0-9]|[1-9]
會。
難道你不能只使用try/catch或檢查文件是否存在? –
開始於'dir('*。mat')' – Daniel