Matlab doesn't write on excel after the first loop in try catch

1 visualización (últimos 30 días)
Hi all
I use try catch to force matlab to continue the loop and in each loop I have the parameters to write to excel files. But after the first successful loop, despite the run continues, I don't see the new files be written. Is there a reason?
  5 comentarios
farzad
farzad el 21 de Jun. de 2019
Thank you very much
well I feel changing cd in the loop could be the problem , since I had many files I wanted to avoid a mess of different files in one folder.
for the last part you were asking what's happening here please look :
I think for the try catch continue, I should include the same code under try . Am I right ?
maybe another way is rethrow ME is it ?
Adam Danz
Adam Danz el 21 de Jun. de 2019
I really can't troubleshoot it without seeing the code. The link you provided is someone else's code.
"I feel changing cd in the loop could be the problem"
It certainly could lead to a problem but I doubt that this alone is preventing the loop from continuing.
If we can't see a version of your code that reproduces the problem, I recommend that you step through the code line by line in debug mode to figure out where the problem happens.

Iniciar sesión para comentar.

Respuesta aceptada

Adam Danz
Adam Danz el 20 de Jun. de 2019
Editada: Adam Danz el 20 de Jun. de 2019
Without having much information, your error is probably due to improper loop setup.
for f = 1:size(Flist)
size(Flist) probably returns a [1 x n] vector which would result in only 1 iteration of the for-loop. If Flist is a list of files you probably want
for f = 1:numel(Flist)
  2 comentarios
farzad
farzad el 21 de Jun. de 2019
Thank you so much , I have tried it despite the f was counting to the write number anyway, I think part of the problem is due to changing folder inside the loop
Adam Danz
Adam Danz el 21 de Jun. de 2019
If the loop was continuing, then 'Flist" must have been a column vector or an nxm array where n>1. In any case, you don't want to use size() in that line of code. numel() is what you want.

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 21 de Jun. de 2019
Editada: Guillaume el 21 de Jun. de 2019
There's never any reason to use cd and using cd is matlab is dangerous since it can change which m files are in scope.
It's double dangerous to use with try... catch statements if don't track which directory you are in. You may be expecting to be in the readfolder directory but are actually still in the writefolder directory, or vice-versa.
Not using cd doesn't mean you have to have everything in the same folders. You can still use as many folders as you want. All matlab functions also work with absolute paths as weel as relative paths, so the code would be something like:
readfolder = 'C:\somewehere\somefolder\toreadfrom';
writefolder = 'C:\somewhere\somefilder\towriteto';
for ...
try
readfile = fullfile(readfolder, Flist{f}); %build absolute path of file to read
A = xlsread(readfile); %A is a very poor variable name!
...
writefile = fullfile(writefolder, Flist{f}); %build absolute path of file to write
xlswrite(writefile, A);
catch
...
end
...
end
On a similar note, close all is also not good practice. You should track which figures you have created and close only these.

Community Treasure Hunt

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

Start Hunting!

Translated by