用逻辑读取txt文件-Matlab线提取

时间:2015-09-26 23:23:49

标签: matlab text input textscan

目前难以阅读.txt文件,其中包含如下所述的总体布局:

(.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"但扭曲的是,有更多的数据"两者之间的线条抑制了简单的逐行提取模式。可以有数百个这样的"更多数据"线...

我知道我想要的数据是每个" ---------------"并且想知道是否有某种方式来检测" a" ---------"然后执行2行以下的行提取。此外,要获得最后一行,尝试实现逻辑以在之前提取该行。

我想过用fgetl简单地浏览每一行,并且if语句捕获" ---------"用strcmpare看起来很漂亮"蛮力 - 等等#34;任何轻量级或高效的解决方案?

1 个答案:

答案 0 :(得分: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}, '-'))包含所有dd{k},则使用-会为您提供1,如果不包含,则为0。然后为此执行cellfun以获取1和0值的数组,其中1表示具有所有-的行。最后,使用find获取1个值的索引。