How to check if one file selected when using MultiSelection in matlab?
    5 ビュー (過去 30 日間)
  
       古いコメントを表示
    
I have a function that allow user to browse and choose some images like this
    [filename, pathname, filterindex] = uigetfile( ...
    {  '*.jpg;*.jpeg;*.png','Images (*.jpg, *.jpeg, *.png)'; ...
       '*.*',  'All Files (*.*)'}, ...
       'Choose Class 1 DataSet', ...
       'MultiSelect', 'on');
And I take the browsed images in a cell array
    ChosenImages = strcat(pathname,filename);
Now I have a problem, if the user entered one image only, it doesn't return this image as one cell, it return each character as cell, and when I use
    length(ChosenImages);
it returns the number of chars in the link!
also I tried
    ischar(ChosenImages{1})
to check if one cell is a cell or not but it gives me an error too.
What can I do to check if the user chosen one image or multiple images?
0 件のコメント
採用された回答
  Guillaume
      
      
 2015 年 12 月 4 日
        <rant> This is a thing I hate about the way mathworks design their language. All these special cases where a function behaves differently (when n = 1 or when n is vector, or...). It hurts genericity and force you to write 'ifs' all over the place when you're expecting to cope with both the general case and the exception. And it's doubly frustrating as they must have the same if pattern in the function you call to generate that exceptional case in the first place <end rant>
To fix the problem, simply convert the exceptional case back to the generic case with:
   [filename, pathname, filterindex] = uigetfile( ...
    {  '*.jpg;*.jpeg;*.png','Images (*.jpg, *.jpeg, *.png)'; ...
       '*.*',  'All Files (*.*)'}, ...
       'Choose Class 1 DataSet', ...
       'MultiSelect', 'on');
  if ~iscell(filename)
    filename = {filename};
  end %now filename is a cell array regardless of the number of selected files.
その他の回答 (2 件)
  Walter Roberson
      
      
 2015 年 12 月 4 日
        [filename, pathname, filterindex] = uigetfile( ...
  {  '*.jpg;*.jpeg;*.png','Images (*.jpg, *.jpeg, *.png)'; ...
     '*.*',  'All Files (*.*)'}, ...
     'Choose Class 1 DataSet', ...
     'MultiSelect', 'on');
 filename = cellstr(filename);
 %now filename is a cell array regardless of the number of selected files.
2 件のコメント
  Ahmed Harun-Al-Rashid
 2016 年 11 月 4 日
				Dear Roberson, I also get help to solve similar problem using your answer. Thank you so much.
Sincerely, Rashid
  zhou
 2024 年 11 月 7 日
        filename = cellstr(filename); % convert char to cellstr
disp(length(filename))
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



