这种文本文件很大,比如我测试的样本文件,一共1281889行,约61.7MB,其余文件有超过120M的。对于这种大文件,手工处理十分费劲,必须要写代码处理。
因此流程很简单:
- 找到第一个Cyclic Acquisition,将此前的全部行,放到比如字符串s1;
- 从s1中移去preload data部分(包括头信息和数据),得到s2;
- 从s2中移去hold data 剖分(包括头信息和数据),得到s3;
- 从s3中移去多余的Data Acquisition头信息,即只保留第一个Data Acquisition头信息,得到s4;
- 将s4输出到a_static.dat。
- 得到1-14行头信息;
- 得到第一个Cyclic Acquisition及以后的全部行
- 合并6、7得到的字符串
- 输出到a_dynamic.dat。
所以这里的关键是如何得到我们需要的字符串,或者将某些字符串移去。一个很好的办法是使用正则表达式(regular expression),MATLAB里的函数是regexp。另外有regexprep是用于将匹配上的字符串用指定字符串替代,比如应用在步骤2、3、4。
本例演示了在MATLAB里使用正则表达式从文本中提取或替换子串。演示了regexp、regexprep的使用。本例也演示了对多个文件批处理的实现。
完整见附件PDF。