2016-03-04 3 views
0

Я использую try, чтобы избежать ошибки Index exceeds matrix dimensions. при просмотре списка файлов. Он делает то, что я ожидаю от него:, используя попытку установить условие a, если в MATLAB

>> 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

Do в '' try' первый попробовать s = зЬгстр (...), поймать ... 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'. Я также рекомендую 'catch ME' сохранять сообщение об ошибке в' ME' struct. – Crowley

+0

Я был после минималистического и (возможно) изящного способа использовать попытку установить логическое условие, так что это не совсем то, что я хотел. В любом случае, я буду читать о структуре 'ME'! –

0

Попробуйте следующие

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

Это не решит проблему, так как она не является алгоритмически подобной. –

+0

Почему бы и нет? Я не нахожу места для «если» там, как если бы строка после try бросает исключение, следующая не будет выполняться в любом случае. Тогда это заставит ваш поток поймать. Разве это не похоже на то, что вы хотели. Если нет, вы можете попробовать, если ((попробуйте strcmp (listFiles (i) .name (1: 9), 'file_name'), catch false, end) == 1) не проверен, но должен работать. –

+0

'try false, a = 1, catch false, end' этот атрибут кода 1 в a, поэтому он не имеет в нем никакого теста. Я хотел проверить состояние, а не просто попробовать что-то. –

Смежные вопросы