【问题标题】:Non-cell array with uigetfile in MatlabMatlab中带有uigetfile的非单元格数组
【发布时间】:2013-04-18 03:32:50
【问题描述】:

我的代码有 2 个部分。第一部分是一个像这样编程的自动文件打开:

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);

我没有机会选择任何文本文档。有人知道为什么要这样做吗?

【问题讨论】:

  • 为什么我们需要你的代码的第一部分来回答这个问题?
  • 我放了以防万一相关的东西可能会导致错误。我不认为第一部分与它有关,但我更愿意把它确定下来。
  • stackoverflow.com/questions/16216968/… 这是我的问题的最后一部分(我希望)。

标签: arrays matlab cell


【解决方案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 是一个字符串)。

【讨论】:

  • 另请注意,如果未成功选择任何内容(也许您按下了取消),filenames 将作为空数组返回,而不是元胞数组。也检查一下。
猜你喜欢
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多