我想使用Matlab指南2015b中创建的GUI计算文件夹中的图像数量。 我写了这段代码:
Id = 3 (actually the value of id will be given by user at run time)
path =strcat ( ' c:\user\Desktop\New\TrainData\',Id)
path=strcat (path,'\')
d=dir (path)
n=length (d)
它显示dir
不能用于单元格输入的错误。当我使用命令提示符时,此代码正在运行。
它仅在我想通过GUI使用时显示错误。最初我认为这是关于路径的问题。
所以我展示了路径,但它给出了完美的结果。
我很迷惑。请在Matlab中提供一些解决方案
答案 0 :(得分:1)
而不是strcat
,您应该使用fullfile
:
path = fullfile('c:\user\Desktop\New\TrainData',num2str(Id))
小心dir,dir还列出子文件夹,所以检查你是否只考虑了图像文件:
d = dir(path);
name = d(~[d.isdir]).name
答案 1 :(得分:1)
您有可能从Id
或其他内容获取inputdlg
变量。它被作为字符串的单元数组而不是字符串读入。您可以使用iscell
:
iscell(Id)
% 1
在点击dir
命令之前,您没有看到任何问题,因为strcat
能够正常处理此问题,但也会产生字符串的单元格数组。
out = strcat('123', {'4'});
class(out)
% cell
如果您彻底阅读了错误消息,则错误会明确指出dir
的输入是单元格而不是字符串。解决此问题的方法是首先检查Id
是否为单元格数组,并在必要时转换为字符串。
Id = inputdlg('Enter an ID');
% Convert to a string if Id is a cell array
if iscell(Id)
Id = Id{1};
end
% Get a listing of all files/directories
d = dir(fullfile(folder, num2str(I)));
% Get number of files
nFiles = sum(~[d.isdir]);
此外,您不希望尝试将数字与字符串(strcat('abc', 1)
)连接起来,因为这会将数字转换为它的ASCII代码。相反,您需要使用num2str
,如上所示。