在MATLAB中分配数组

时间:2011-10-24 09:59:47

标签: matlab

我对以下代码有疑问。

[name file] = uigetfile('*', 'Select an image');
if [name file] ~= 0
    %file found
end

有没有办法说[名称文件]可以分配给数组?例如,Filepath[2] = ui.getfile..(这不起作用)。

当我尝试以下代码时,我只获取文件名而不是路径。我宣布这个阵列错了吗?

Filepath{2} = uigetfile({'*.wav;*.mp3;*.aac;*.ogg'}, 'Select a file');
%Filepath{2} = uigetfile('*', 'Select an image');
%noFile = Filepath(0);
%if Filepath[1]~= 0
%if Filepath ~= 0

disp('Loading signal');
disp(Filepath);
%disp(Filepath{0});
disp('Filepath{1}');
disp(Filepath{1});
disp('Filepath{2}');
disp(Filepath{2});

2 个答案:

答案 0 :(得分:2)

MATLAB中的数组访问使用括号表示“普通”数组,或使用cell arrays的大括号。 “普通”数组只能保存数值,因此您必须使用单元格数组 - 所以请尝试Filepath{2} = uigetfile(...)

答案 1 :(得分:2)

我认为你可能会对函数的多个“输出参数”的语法感到困惑。与大多数编程语言不同,MATLAB允许函数具有多个返回值;这些被称为输出参数。当你有一个函数[a b] = foo(x)时,最好将其视为将第一个输出发送到名为a的变量并将第二个输出发送到名为b的变量的语法。即使语法[a b]看起来像一个数组,最好不要这样想。

以下是uigetfile

的示例
[filename, pathname] = uigetfile('*.m', 'Select a file');

分别在名为filenamepathname的变量中提供所选文件的文件名和路径。

filename =

foo.m


pathname =

/home/tobin/
  

但我不明白的是,如果它被取消,这个方法返回零,如果成功,则返回填充数组。那么如何检查零(文件未找到)?

为什么不尝试一下?

> [filename, pathname] = uigetfile('*', 'Select a file')

filename =

     0


pathname =

     0

如果取消uigetfile,则两个输出均为0。所以你可以这样做:

[filename, pathname] = uigetfile('*', 'Select a file');
fullname = horzcat(pathname, filename);
if filename == 0
    fprintf('uigetfile was cancelled.\n');
else
    fprintf('user selected "%s".\n', fullname);
end