2015-09-26 36 views
1

目前有阅读难倒在与一般的布局后述的.txt文件:读入TXT文件-Matlab线提取与逻辑

(.txt文件遵循该总体布局“N”次)

----------------------------------- 
Header Info 1 
Desired data 1 
More data 
More data 
----------------------------------- 
Header Info 2 
Desired data 2 
More data 
----------------------------------- 
Header Info 3 
Desired data 3 
More data 
More data 
More data 
More data 
---------------------------------- 
Header Info N 
Desired data N 
More data 
More data 
More data 
CLOSING DATA LINE 

我想只提取“期望的数据”以及最终的“CLOSING DATA LINE”,但扭曲的是,存在不同的“更多数据”行,它们之间禁止一个简单的逐行提取模式。可以有0到数百这些“更多数据”行...

我知道,我希望的数据是每个“---------------”下面2行和想知道是否有某种方法来“检测”一个“---------”,并执行一条线以下2行。此外,为了获得最后一行,试图实现逻辑来提取该行之前。

我想过简单地通过每一行与fgetl,并有if语句捕获“---------”与strcmpare似乎很漂亮“暴力 - ish”。任何轻量级或高效解决方案

+0

Matlab +文件读取+字符串在所述文件中+ **轻量级**?:)您是否打算使用matlab?我可能会使用一个构造良好的'system'调用几个unix实用程序,然后解析它。 –

回答

2

你可以试试下面的例子中,假设你的文本文件命名为a.txt

% open and read file 
f = fopen('a.txt'); 
d = textscan(f, '%s', 'Delimiter', ''); 

% since d is a cell containing another cell array 
dd = d{1}; 

% index of '-------' lines 
myidx = find(cellfun(@(DD)all(ismember(DD, '-')), dd)); 

% output data 
mydata = [dd(myidx + 2); dd(end)]; 

% close file 
fclose(f); 

使用all(ismember(dd{k}, '-'))给你1,如果线dd{k}包含所有-,和0,如果没有。然后执行cellfun以获得1和0值的数组,其中1表示所有-的行。最后,使用find获得1个值的索引。