can someone help me figure this one out?
I want to be able to browse for files and take the selected files in a loop like however i get an error "brace indexing not allowed" however, the code works if i select 2 or more files.
Brace indexing is not supported for variables of this type.
Error in m190507_model_vehicle_test_compare (line 45)
load(files_to_compare{i})
[files_to_compare,path] = uigetfile({'*.mat'},'MultiSelect','on');
for i = 1:1:length(files)
load(files{i})

 Réponse acceptée

Adam Danz
Adam Danz le 13 Mai 2019
Modifié(e) : Adam Danz le 17 Fév 2021
If you select >1 file, the output of uigetfile() is stored in a cell array which your for-loop is designed to handle. If you select 1 file, the output of uigetfile() is stored as a char array which your for-loop is not designed to handle.
What you want to do is change the char array to a cell array.
if ischar(files_to_compare)
files_to_compare = {files_to_compare};
end
Then enter your for-loop.
I'd add one more conditional to handle the event of selecting 0 files.
if isnumeric(files_to_compare) && isequal(files_to_compare,0)
return % quit the function
% error('User did not select any files.') % _or_ throw an error
end

4 commentaires

thanks a lot Adam. That worked.
and thank you for going one more step to highlight the no selection condition.
Adam Danz
Adam Danz le 13 Mai 2019
Glad I could help.
if isequal(files_to_compare,0) || isequal(path,0)
disp('User pressed cancel')
else
disp(['User selected ', fullfile(path, files_to_compare)])
end
if ischar(files_to_compare)
files_to_compare = {files_to_compare};
end
can be replaced by the shorter (but slightly less efficient) code
files_to_compare = cellstr(files_to_compare);

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 13 Mai 2019

0 votes

This is normal. uigetfile only returns a cell array if more than one file was selected. You can use iscell or ischar to test. And watch out for nothing selected which returns a numeric scalar.
Also you used the wrong variable names between the lines

1 commentaire

yes i just notices. but in my main file the variables are correct. i made some changes here to only extract the relevant code for my case. thanks for pointing it out anyway and thank you for the answer.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by