2010-09-13 30 views
13

Estoy convirtiendo algunos archivos .dat en archivos .mat usando una función. Estoy llamando a esta función dentro de un bucle para convertir una cantidad de archivos. Hay algunos casos en los que mi archivo .dat está dañado y la función no puede convertirse y se produce un error, deteniendo el ciclo.¿Cómo puedo continuar con un ciclo cuando ocurre un error en MATLAB?

Ahora mi pregunta es: ¿Hay algún comando donde cuando ocurre el error debe omitir el valor actual (i) en el bucle e ir para el siguiente valor de incremento (en mi caso el siguiente archivo)?

Respuesta

20

Usted puede hacer esto mediante una instrucción TRY/CATCH junto con CONTINUE. Coloque el siguiente dentro de su bucle:

try    %# Attempt to perform some computation 
    %# The operation you are trying to perform goes here 
catch exception %# Catch the exception 
    continue  %# Pass control to the next loop iteration 
end 

EDIT:

Amro sugiere una buena idea en su comentario a continuación. Es posible que desee emitir una advertencia que muestre que se produjo el error y para qué archivo, o tal vez incluso desee guardar una lista de los archivos que no se convirtieron correctamente. Para hacer esto último, primero puede inicializar una matriz celda vacía antes de empezar el bucle:

failedFiles = {}; %# To store a list of the files that failed to convert 

Entonces, después de haber contraído la excepción, pero antes de emitir el comando continue, agregue el nombre/ruta del archivo actual de ser convertido a la lista:

... 
catch exception 
    failedFiles = [failedFiles; {'currentFile.dat'}]; 
    continue 
end 

Cuando se realiza el bucle, a continuación, puede mirar a failedFiles a ver fácilmente lo que no se convirtieron correctamente.

+6

tal vez debería notificar al usuario del error: 'tratar, ..., Atrápame, advirtiendo (ME.identifier, ME.message), continúe, end' – Amro

Cuestiones relacionadas