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


禁止诸如开发者知识库/布布扣/码迷/学步园/马开东等 copy 他人博文乃至博客的网站转载