Excel MATLAB单元到字符串

Excel MATLAB单元到字符串,excel,matlab,casting,cell,Excel,Matlab,Casting,Cell,我试图阅读excel工作表,然后通过在字符串中查找两个“/”来查找不为空且包含日期信息的单元格 但是matlab在处理单元类型时总是出错 “类型为“cell”的输入参数的未定义运算符“~=” “类型为‘cell’的输入参数的未定义函数‘string’。” “类型为‘cell’的输入参数的未定义函数‘char’。” 请帮助修复它您的代码存在多个问题。由于raw是一个单元格数组,因此不能在其上运行isnan,isnan用于数值数组。由于您感兴趣的只是包含文本的单元格,因此根本不需要使用raw,任何空

我试图阅读excel工作表,然后通过在字符串中查找两个“/”来查找不为空且包含日期信息的单元格 但是matlab在处理单元类型时总是出错 “类型为“cell”的输入参数的未定义运算符“~=” “类型为‘cell’的输入参数的未定义函数‘string’。” “类型为‘cell’的输入参数的未定义函数‘char’。”


请帮助修复它

您的代码存在多个问题。由于
raw
是一个单元格数组,因此不能在其上运行
isnan
isnan
用于数值数组。由于您感兴趣的只是包含文本的单元格,因此根本不需要使用
raw
,任何空白单元格都不会出现在
txt

我的方法是创建一个逻辑数组,
有两个斜线
,然后使用它从
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);
应该给出一个数字数组,其中(i,j)第元素包含斜杠数。比如说,

>> cellfun(@numel,strfind({'a','b';'/','/abc/'},'/'))
ans =
     0     0
     1     2
这里的关键是使用
strfind


现在,您可能想在问题中展开一点,说明下一步打算用
txt
做什么——换句话说,更多地指定所需的输出,这总是一件好事。如果您打算读取日期,最好是预先读取,例如使用
regexp
datetime
而不是获取一个数组,该数组随后可以映射到日期所在的位置。按原样,使用
ans>=2
下一步将为您提供一个逻辑数组,该数组可以让您提取匹配的条目。

问题是,我只想在过滤其中包含日期的行之后使用数字数据,但是使用这种方法,数据在num和txt矩阵之间进行SHFTE,因此我尝试使用原始数据。我修改了代码以处理原始数据,而不仅仅是文本数据。事实证明,ismember可以处理数字数据和字符数据,因此变化非常小。
cellfun(@numel,strfind(txt,'/'))
>> cellfun(@numel,strfind({'a','b';'/','/abc/'},'/'))
ans =
     0     0
     1     2