Matlab doesn't write on excel after the first loop in try catch
Ältere Kommentare anzeigen
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 Kommentare
gonzalo Mier
am 20 Jun. 2019
Without the code all the answers will be guessed. Can you provide as the code?
farzad
am 20 Jun. 2019
@ farzad, We need a MWE. You'll need to share code that reproduces the problem. If your car doesn't start, you can't take your neighbor's car to the mechanic to get it fixed.
If your code is sensitive, you can simplify it so that it recreates the problem with as few lines as possible.
for f = 1:size(Flist) b% <--- size(Flist) returns a 1x2 vector
try
close all
cd readfilesfolder %<--- it's better to use absolute paths to files
filename = Flist{f}; %than to change the cd within a loop
A = xlsread(filename);
.....
.....
cd writefilesfolder % <---- see comment above
xlswrite % <--- does it overwrite the same file each time?
catch
warning
continue
end
mycodeagain % <--- what's happening here?
end
farzad
am 21 Jun. 2019
Adam Danz
am 21 Jun. 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.
Akzeptierte Antwort
Weitere Antworten (1)
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.
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!