目前难以阅读.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;任何轻量级或高效的解决方案?
答案 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个值的索引。