MATLAB单元格到字符串



我试图读取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是一个单元数组,因此不能在其上运行isnanisnan用于数值数组。由于您感兴趣的只是其中包含文本的单元格,因此根本不需要使用rawtxt中不会出现任何空白单元格。

我的方法是创建一个逻辑数组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做什么——换句话说,更多地指定所需的输出,这总是一件好事。如果你打算读取日期,最好只是提前读取,例如使用regexpdatetime,而不是获得一个可以映射到日期所在位置的数组。照原样,接下来使用ans>=2将为您提供一个逻辑数组,它可以让您提取匹配的条目。

相关内容

  • 没有找到相关文章

最新更新