我试图读取excel工作表,然后通过在字符串中找到两个"/"来找到不为空且包含日期信息的单元格但是matlab在处理单元类型方面一直存在错误"cell"类型的输入参数的运算符"~="未定义""cell"类型的输入参数的函数"string"未定义""cell"类型的输入参数的函数"char"未定义">
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
将为您提供一个逻辑数组,它可以让您提取匹配的条目。