如何解决MATLAB 单元格到字符串
我正在尝试读取 Excel 工作表,然后通过在字符串中查找两个“/”来查找非空且包含日期信息的单元格 但是matlab在处理单元格类型时一直出错 “未定义运算符 '~=' 用于类型为 'cell' 的输入参数。” “未定义函数 'string' 用于类型为 'cell' 的输入参数。” “未定义函数 'char',用于类型为 'cell' 的输入参数。”
MyFolderInfo = dir('C:\');
filename = 'Export.xls';
[num,txt,raw] = xlsread(filename,'A1:G200');
for i = 1:length(txt)
if ~isnan(raw(i,1))
if sum(ismember(char(raw(i,1)),'/')) == 2
A(i,1) = raw(i,1);
end
end
end
请帮忙解决
解决方法
您的代码存在多个问题。由于 raw
是元胞数组,因此您不能对其运行 isnan
,isnan
用于数值数组。由于您只关心其中包含文本的单元格,因此您根本不需要使用 raw
,txt
中不会出现任何空白单元格。
我的方法是创建一个逻辑数组 has_2_slashes
,然后使用它从 raw
中提取包含两个斜杠的元素。
这是我的代码。我将其概括为读取多列,因为您的原始代码似乎只用于处理一列。
filename = 'Export.xls';
[~,~,raw] = xlsread(filename,'A1:G200');
[num_rows,num_cols] = size(raw);
has_2_slashes = false(num_rows,num_cols);
for row = 1:num_rows
for col = 1:num_cols
has_2_slashes(row,col) = sum(ismember(raw{row,col},'/')) == 2;
end
end
A = raw(has_2_slashes);
,
cellfun(@numel,strfind(txt,'/'))
应该给你一个数字数组,其中第 (i,j) 个元素包含斜杠的数量。例如,
>> cellfun(@numel,strfind({'a','b';'/','/abc/'},'/'))
ans =
0 0
1 2
这里的关键是使用 strfind
。
现在您可能想在您的问题中稍微扩展一下您接下来打算用 txt
做什么——换句话说,更多地指定所需的输出,这总是一件好事。如果您打算读取日期,最好预先读取它,例如使用 regexp
或 datetime
,而不是获取一个可以映射到日期位置的数组。照原样,使用 ans>=2
next 会为您提供可以让您提取匹配条目的逻辑数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。