1

我有一个 ascii 文件,它的前几百行被注释(后面是数据),提供了一些关于数据的信息。例如,这些是我从大量注释的行中剪下的几行: 在此处输入图像描述

现在我只使用loadas 来读取没有评论的数据:

filename = uigetfile('*.dat', 'Select Input data');
Data = load(filename, '-ascii');

如何阅读注释行(在数据开始之前结束)并根据某些标识(例如程序名称和版本创建日期等)从所有注释中挑选一些注释?

4

2 回答 2

2

用于textscan将行读入元胞数组:

fid = fopen(filename, 'r');
C = textscan(fid, '%s', 'Delimiter', '\n');
C = C{:};  %// Flatten cell array
fclose(fid);

现在您可以使用它regexp来操作文本数据。例如,要查找包含字符串“创建日期”的注释行,您可以这样做:

idx = ~cellfun('isempty', regexp(C, "^\s*%.*Creation date"));

其中 "^\s*%匹配行首的百分号 ( %) 以及任何前导空格,并且.*匹配任意数量的字符,直到出现“创建日期”。不用说,您可以根据自己的喜好调整正则表达式模式.

结果变量idx存储了一个逻辑(布尔)向量,在与模式匹配的行的位置处带有“1”(您可以使用 获得它们的显式数字索引find(idx))。接下来,您可以使用 for 循环过滤这些行C(idx)或对其进行迭代。

于 2013-07-02T16:18:49.000 回答
0
fid = fopen(filename); 
nHeaderRows = 412; 
headerCell = cell(nHeaderRows, 1); 
for i=1:nHeaderRows 
    headerCell{i} = fgets(fid); 
end 
headerText = char(headerCell);
于 2013-07-02T21:01:34.140 回答