我有一个 ascii 文件,它的前几百行被注释(后面是数据),提供了一些关于数据的信息。例如,这些是我从大量注释的行中剪下的几行:
现在我只使用load
as 来读取没有评论的数据:
filename = uigetfile('*.dat', 'Select Input data');
Data = load(filename, '-ascii');
如何阅读注释行(在数据开始之前结束)并根据某些标识(例如程序名称和版本、创建日期等)从所有注释中挑选一些注释?
我有一个 ascii 文件,它的前几百行被注释(后面是数据),提供了一些关于数据的信息。例如,这些是我从大量注释的行中剪下的几行:
现在我只使用load
as 来读取没有评论的数据:
filename = uigetfile('*.dat', 'Select Input data');
Data = load(filename, '-ascii');
如何阅读注释行(在数据开始之前结束)并根据某些标识(例如程序名称和版本、创建日期等)从所有注释中挑选一些注释?
用于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)
或对其进行迭代。
fid = fopen(filename);
nHeaderRows = 412;
headerCell = cell(nHeaderRows, 1);
for i=1:nHeaderRows
headerCell{i} = fgets(fid);
end
headerText = char(headerCell);