2015-09-26 69 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個值的索引。