微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MATLAB 单元格到字符串

如何解决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 是元胞数组,因此您不能对其运行 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 next 会为您提供可以让您提取匹配条目的逻辑数组。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。