MATLAB 读取 Excel 中连续数据

ave = zeros(27, 10);
[data, txt, rawdata] = xlsread('xls1.xls', '第一组红葡萄酒品尝评分');
maxval = size(rawdata, 1);
i = 1;
tot = 0;
while i <= maxval
    if (~isnumeric(rawdata{i, 3}) || isnan(rawdata{i, 3}))
        i = i + 1;
        continue;
    end
    testnum = isstrprop(rawdata{i - 2, 1}, 'digit');
    cur_id = str2double(rawdata{i - 2, 1}(testnum));
    j = i;
    while (j < maxval && isnumeric(rawdata{j + 1, 3}) && ~isnan(rawdata{j + 1, 3}))
        j = j + 1;
    end
    for k = i : j
       %k scans the current block
    end
    %fprintf('k from %d to %d\n', i, j);
    i = j;
    i = i + 1;
end

 

最近可能经常要用,就先写个模板存着
isnan 一开始用成了 isempty ,后来改成 data(i, 1) == NaN 的时候 MATLAB 居然提示我用 isnan
有 JetBrains 内味儿了

需要注意的几点:
  1. isnumeric 对 nan 的返回值也是 logical 1,所以要再判一下 isnan
  2. rawdata 是元胞数组,访问的时候用大括号访问其元素
  3. MATLAB 提示我如果对象是标量,则用 str2double,官网说 str2num 会受空格影响把空格前后拆成向量,比如 1 +2i 用 str2num 就会返回向量 [1+0i 0+2i],
  1 + 2i 和 1+2i 用str2num 返回值都是 1+2i,str2double 则会返回 1+2i,所以标量用 str2double
  4. 从字符串中提取其中的数字的模板就是 testnum 和 cur_id 那两句,isstrprop 返回的是01数组(第二句语法实在是没学过,大概像是按位乘?)

循环中 i 是找到的连续数据的上限,j 是下限,k 扫描每一行,k 的循环里可以继续需要的操作

 

 参考链接

matlab如何读取含有字母、汉字和数字的excel文件? – MATLAB中文论坛 (ilovematlab.cn)

求助一个将字符串提取其中数字的方法 – MATLAB中文论坛 (ilovematlab.cn)

posted @ 2021-07-20 08:55  AWordThatWeDefine  阅读(140)  评论(0编辑  收藏  举报