xcysblog
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)

分类:

技术点:

相关文章:

  • 2022-02-05
  • 2021-12-19
  • 2022-02-09
  • 2022-12-23
  • 2022-12-23
  • 2021-05-01
  • 2021-06-25
猜你喜欢
  • 2021-11-20
  • 2021-09-01
  • 2022-02-08
  • 2021-09-30
  • 2021-11-24
  • 2021-06-09
  • 2021-06-11
相关资源
相似解决方案