文本文档的信息多是按照行的格式读写的,因此在读取时对提取到每行的文本信息进行关键字的对比找到指定行,然后利用正则表达式提取相应的信息即可。

文本信息示例

positions bitstream size 550216 B (12.5996 bpp)
positions processing time (user): 8.203 s
colors bitstream size 9459 B (0.216605 bpp)
colors processing time (user): 5.984 s
reflectances bitstream size 1706 B (0.0390663 bpp)
reflectances processing time (user): 0.64 s

1. MATLAB读取文本文档

fidin = fopen('encoder.txt','r');
while ~feof(fidin)
    tline = fgetl(fidin);

2. strncmp函数定位行信息

strncmp(tline,'positions bitstream',15)

对比前两个字符串中前15个字符是否一致,一致返回非零结果,可根据此结果执行信息提取操作。

if strncmp(tline,'positions bitstream',15)
   Gbit = regexp(tline,'\d*\.?\d*','match');

3. strfind函数定位行信息

if strfind(tline,'h.r,PSNR   F')
   hRpsnr = regexp(tline,'\d*\.\d*','match');

strfind会在tline查找是否含有用户输入的字符串,并返回第一个字母在tline的位置,同样可以作为进一步操作的判据。

4. regexp正则表达式

regexp(tline,'\d*\.\d*','match');
regexp(tline,'\d*\.?\d*','match');

第一个提取tline中的浮点数数值,第二个提取tline中整数、浮点数两种数值,可根据数据类型自行选择。

tline = 'positions bitstream size 550216 B (12.5996 bpp)';
Gbit1 = regexp(tline,'\d*\.\d*','match');
Gbit2 = regexp(tline,'\d*\.?\d*','match');

Gbit1 = {'12.5996'}

Gbit2 = {'550216' '12' '5996'}

正则表达式返回的结果为元胞数组类型,所有的数据都是字符串类型,如果要对数据进行操作可以利用str2num转换为数值类型,如果要写入Excel文档则需要通过num2str再转换回来。

资源名:MATLAB实现txt文本数据分离的源程序代码.zip 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员 fgetl 用法,tline = fgetl(fileID),依次返回文件的每一行,并删除换行符。 regexp,匹配正则表达式。例如在本文的用法是根据空格和逗号将一行进行切割。 在帮助别人的同时提高自己,有人提到这个问题,给了我去探究的机会,将最终代码做一下记录。 问题描述: 现有一大矩阵存储于某一txt文件末端,需要用导入matlab进行进一步的处理。这就需要略过前面很多无效行,如果采用传统的fscanf未免有些麻烦,于是问题提出:matlab如何快速从文本文件指定行进行读取? function [out]=readData(path) %从指定行开始读取数据... 文件大致如下:怎样读取 END OF HEADER之后的数据 并保存到新文件呢2.10 OBSERVATION DATA G (GPS) RINEX VERSION / TYPEteqc2000Feb29 autorun 20050126 05:06:52UTCPGM / RUN BY / DATEMSWinN... 遇到了这样的一个问题,在matlab要读取下面dat文件数据存到数组。 但是,最前面的一行是数据提示语,例如第一列的rcs代表下面的数据是雷达目标的rcs,第二列的fre代表其对应的频率。我们要读到matlab要进行处理的数据当然不包括第一行的rcs和fre。所以怎么跳过第一行直接读后面的呢? 尝试过load和fscanf函数,好像都不行。最后找到了一个textscan函数可以实现这个目的。下面是代码以及运行结果: clc;clear;close all; fid=fopen('rcs.dat' 以我的为例,想要在matlab循环读取这些图片,进行处理,则可以 1.读取name.txt所有字符串,共有400行,存成cell [name]=textread('name.txt','%s',400); 2.循环取出 。name:400*1 cell for i=1:400 str_name=name{i}; img=imread(str_name)