温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MATLAB如何提取复杂文本中的数据

发布时间:2021-12-30 17:23:05 来源:亿速云 阅读:276 作者:小新 栏目:大数据

这篇文章主要介绍MATLAB如何提取复杂文本中的数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

其实也不能算是复杂文本,还是有规律的。这个文本装的是我实验室设备采集到的数据,如下:

MATLAB如何提取复杂文本中的数据

数据被我码掉了一部分,我需要提取出框住的那部分数据,这是一个矩阵,他上边的列号和左边的行号都是传感器的序号。

读取数据的简单思路:

通过观察可以发现,我们想要获取的数据都是在CH#开头的行的后面,而且这个行的后面都是数值!所以这就很简单了:

  • 我们用一个while循环,把到达文件尾作为结束条件,

  • 每次循环中判断一下是否已经走过了CH#开头的行,

  • 如果没走过CH#开头的行就继续,

  • 如果走过了CH#开头的行就开始读数。

下面直接上代码,再做一些简单的说明

clc
clear

%% 文件打开对话框,选择文件
[file, path] = uigetfile({'*.TXT'}, '选择走时文件');
% 如果没有选择文件就退出
if file == 0
    return
end
% 文件完整路径
fullPath = [path, file];

%% 打开文件
fid = fopen(fullPath, 'r');

%% 保存结果的矩阵
ElapsTimeData = [];

%% 标志开始模式为'^CH#',开始标志的初值为0
startParten = '^CH#';
startFlag = 0;
%% 循环读取文件
while(~feof(fid))
    % 一次循环读取一行,并把两边的空白去掉
    curLine = strip(fgetl(fid));
    % 如果开始标志已经被设置为1,而且不是空行,则读取
    if startFlag == 1 && ~isempty(curLine)
        cur_data = cellfun(@str2double, regexpi(strip(curLine), '\s+', 'split'));
        ElapsTimeData = [ElapsTimeData; cur_data];
    end

    % 当碰到startParten时,其下一行开始就是走时数据了
    if regexpi(curLine, startParten)
        startFlag = 1;
    end

end

% 删除第一列,第一列放的是传感器序号
ElapsTimeData(:, 1) = [];

关于regexpi函数它接受三个参数:

  • 第一个是原字符串,

  • 第二个是我们要匹配的模式,

  • 第三个参数是正则表达式输出规则。

上面程序中,加粗黑体的那句

regexpi(strip(curLine), '\s+', 'split')
  • 源字符串就是当前行

  • 匹配模式:\s+表示一个或以上的空格(空白)

  • 输出规则:我采用的是split,表示:返回除匹配字符串之外的所有字符串!

所以,我这里将输出除空白以外的所有字符,而这个匹配是在匹配到'^CH#'之后才开始的,所以我们便能获得'^CH#'所在行的后面所有行中的数字了。

如果第三个参数使用match的话,则像下面这样写也行,就是匹配模式稍微多了点东西!

regexpi(strip(curLine), '\d+\.\d+', 'match')

另外regexpi返回的是一个细胞数组,每一个匹配到的结果都放在了单个细胞中。所以我这里用的cellfun把每一个细胞中的字符转化为数值:

cur_data = cellfun(@str2double, regexpi(strip(curLine), '\s+', 'split'));

Note:

上面给的代码中我删减了处理错误的代码,比如说:不符合上面规则的文件,或者我们不小心把要提取的部分删了点数据,等等。

这些可以用 try - catch 结构来处理,我就不多说了,感兴趣的可以自己试试看,实际在提取数据时,最好加上这些处理错误情况的代码。

读取结果:

MATLAB如何提取复杂文本中的数据

也码掉一部分数据

以上是“MATLAB如何提取复杂文本中的数据”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI