Monthly Archives: March 2014

MATLAB之正则表达式

(giscn@msn.com)

这种文本文件很大,比如我测试的样本文件,一共1281889行,约61.7MB,其余文件有超过120M的。对于这种大文件,手工处理十分费劲,必须要写代码处理。

因此流程很简单:

  1. 找到第一个Cyclic Acquisition,将此前的全部行,放到比如字符串s1;
  2. 从s1中移去preload data部分(包括头信息和数据),得到s2;
  3. 从s2中移去hold data 剖分(包括头信息和数据),得到s3;
  4. 从s3中移去多余的Data Acquisition头信息,即只保留第一个Data Acquisition头信息,得到s4;
  5. 将s4输出到a_static.dat。
  6. 得到1-14行头信息;
  7. 得到第一个Cyclic Acquisition及以后的全部行
  8. 合并6、7得到的字符串
  9. 输出到a_dynamic.dat。

所以这里的关键是如何得到我们需要的字符串,或者将某些字符串移去。一个很好的办法是使用正则表达式(regular expression),MATLAB里的函数是regexp。另外有regexprep是用于将匹配上的字符串用指定字符串替代,比如应用在步骤2、3、4。

本例演示了在MATLAB里使用正则表达式从文本中提取或替换子串。演示了regexp、regexprep的使用。本例也演示了对多个文件批处理的实现。

完整见附件PDF。