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 的循环里可以继续需要的操作
参考链接
禁止诸如开发者知识库/布布扣/码迷/学步园/马开东等 copy 他人博文乃至博客的网站转载
,用户转载请注明出处:https://www.cnblogs.com/xcysblog/