背景
从一份txt文件中筛选出有效信息,txt文件有非常多行,依靠关键字筛选出有效行,并从行中提取有效信息。
test.txt文件例如:
aaa 1 2 3
valid 0.1 0.2 0.3
aaa 1 2 3
valid 0.11 0.22 0.32
我们的目的是要提取出valid
后面的两行数据。
实现
解释一些函数
fgetl
用法,tline = fgetl(fileID)
,依次返回文件中的每一行,并删除换行符。
regexp
,匹配正则表达式。例如在本文中的用法是根据空格和逗号将一行进行切割。
clear;clc
fileName='test.txt';
fileID=fopen(fileName);
data=[];
while 1
tline=fgetl(fileID);
if tline<0 %表示如果文件读到了末尾,则tline会变为负数,跳出循环
break;
end
if ~contains(tline,'valid') %如果该行中不存在我们需要的关键字,则略过
continue;
end
expression='((?-x) )|((?-x),)';
readFileLine=regexp(tline,expression,'split')
data=[data;str2num(cell2mat(readFileLine(2))),str2num(cell2mat(readFileLine(3))),str2num(cell2mat(readFileLine(4)))]
end
这样,我们就得到了有效数据。