资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

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

这篇文章主要介绍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如何提取复杂文本中的数据”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


分享题目:MATLAB如何提取复杂文本中的数据
文章起源:http://cdkjz.cn/article/jjcogo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220