2013-04-24 71 views
2

我的代码有2个部分。第一部分是编程这样一个文件自动开启:在Matlab中使用uigetfile的非单元阵列

fichierref = 'H:\MATLAB\Archive_08112012'; 
files = dir(fullfile(fichierref, '*.txt')); 
numberOfFiles = numel(files); 
delimiterIn = ' '; 
headerlinesIn = 11; 
for d = 1:numberOfFiles 
    filenames(d) = cellstr(files(d).name); 
end 

for i=1:numberOfFiles 
    data = importdata(fullfile(fichierref,filenames{i}),delimiterIn,headerlinesIn); 
end 

后来,我希望用户选择自己的文件进行分析。虽然这有一个问题。我输入的线路如下:

reference = warndlg('Choose the files from which you want to know the magnetic field'); 
uiwait(reference); 
filenames = uigetfile('./*.txt','MultiSelect', 'on'); 
numberOfFiles = numel(filenames); 
delimiterIn = ' '; 
headerlinesIn = 11; 

它给我下面的错误后,我按OK键上的提示:

Cell contents reference from a non-cell array object. 

Error in FreqVSChampB_no_spec (line 149) 
data=importdata(filenames{1},delimiterIn,headerlinesIn); 

我没有选择任何文本文档的机会。任何人都有一个想法,为什么这样做?

+0

为什么我们需要这个问题的代码的第一部分? – Shai 2013-04-24 14:22:27

+0

我提出了一些相关的事情可以做错误。我不认为第一部分与它有关,但我最好确定它。 – Vissenbot 2013-04-24 14:30:39

+0

http://stackoverflow.com/questions/16216968/unable-to-open-a-file-with-uigetfile-in-matlab 这是我的问题的最后一部分(我希望)。 – Vissenbot 2013-04-25 14:08:58

回答

1

uigetfile与`MultiSelect'一起使用时有点令人讨厌:当您选择多个文件时,输出将作为单元格数组(字符串)返回。 但是,当只有一个文件被选中时,输出是字符串类型的(而不是是一个单元格的单元阵列,正如人们所期望的那样)。

所以,为了解决这一问题:

filenames = uigetfile('./*.txt','MultiSelect', 'on'); 
if ~iscell(filenames) && ischar(a) 
    filenames = {filenames}; % force it to be a cell array of strings 
end 
% continue your code here treating filenames as cell array of strings. 

编辑:
正如指出的@Sam必须验证用户没有按“取消”的UI(通过检查filenames是一个字符串)。

+3

另外请注意,如果没有任何成功选择(也许你按下取消),'filenames'返回为空数组,而不是单元格数组。检查这一点。 – 2013-04-24 14:29:23