2016-03-04 37 views
0

我使用try以避免在經歷文件列表時出現Index exceeds matrix dimensions.錯誤。它做什麼,我從它期望:使用嘗試設置在MATLAB中的if條件

>> try strcmp(listFiles(6).name(1:9), 'file_name') , catch false, end 

ans = 

    1 

>> try strcmp(listFiles(5).name(1:9), 'file_name') , catch false, end 

ans = 

    0 

但是,如果我想使用它if內的條件如下:

path = 'folder'; 
listFiles = dir(path); 

for i = 1:length(listFiles) 
    if (try strcmp(listFiles(i).name(1:9), 'file_name') , catch false, end) 
     [...] 
    end 
end 

它返回以下錯誤invalid used of a reserved word

是否有一種方法來強制它內部或我必須使用一個獨立變量?

+0

執行'try'第一'試試S = STRCMP(...),趕... end'然後做你'if',如果' s,...,end'。 – David

+0

是的,這是我最終做的,有沒有辦法避免這個自變量? –

+1

是否有任何特定的原因想避免額外的變量? – David

回答

0

try沒有產值所以沒什麼的if可以作爲條件使用。

try都有自己的if條款,所以

try 
    % Commands 
catch 
    % Different commands 
end 

作品如果在% Commands錯誤,那麼break和運行% Different commands

所以這段代碼應該做的伎倆:

path = 'folder'; 
listFiles = dir(path); 

for ii = 1:length(listFiles) 
    try 
    strcmp(listFiles(ii).name(1:9), 'file_name') 
    % Commands if strcmp does not fail 
    catch 
    % Commands if strcmp (or any other command) fails 
    end 
end 
+0

所以基本上我想做的事情是不可能的。謝謝你的理由! –

+0

如果我的代碼完全符合你的要求,那麼你的方法低估了'try'的威力。我還建議'抓住ME'將錯誤信息保存在'ME'結構中。 – Crowley

+0

我之前是使用一種簡單的(可以說是)優雅的方式來嘗試設置一個邏輯條件,所以這並不是我想要的。無論如何,我會閱讀關於'ME'結構! –

0

嘗試以下

for i = 1:length(listFiles) 
try strcmp(listFiles(i).name(1:9), 'file_name') 
    [...] 
catch false, 
end 
end 
+0

這並不能解決問題,因爲它在算法上並不相似 –

+0

爲什麼不能?我不會在那裏找到'if'的地方,就好像try後面的行拋出異常然後不會被執行,然後它會拋出你的流。這不是你想要的嗎?如果不是的話,你可以試試if((嘗試strcmp(listFiles(i).name(1:9),'file_name'),catch false,end)== 1)未測試,但必須工作。 –

+0

'嘗試false,a = 1,catch false,end'這個代碼屬性1爲a,所以它沒有任何測試。我想測試的情況不只是嘗試一些。 –