Matlab:如何读取ascii文件的注释部分
我有一个ascii文件,它的前几百行被注释(后面是数据),提供了一些关于数据的信息。例如,这些是我从大量注释行中剪下的几行: 目前,我仅使用Matlab:如何读取ascii文件的注释部分,matlab,comments,text-parsing,Matlab,Comments,Text Parsing,我有一个ascii文件,它的前几百行被注释(后面是数据),提供了一些关于数据的信息。例如,这些是我从大量注释行中剪下的几行: 目前,我仅使用loadas读取无注释的数据: filename = uigetfile('*.dat', 'Select Input data'); Data = load(filename, '-ascii'); 如何读取注释行(在数据开始之前结束)并根据一些标识(如程序名称和版本,创建日期等)从所有注释中选择一些注释?用于将行读取到单元格数组中: fid = fo
load
as读取无注释的数据:
filename = uigetfile('*.dat', 'Select Input data');
Data = load(filename, '-ascii');
如何读取注释行(在数据开始之前结束)并根据一些标识(如程序名称和版本,创建日期等)从所有注释中选择一些注释?用于将行读取到单元格数组中:
fid = fopen(filename, 'r');
C = textscan(fid, '%s', 'Delimiter', '\n');
C = C{:}; %// Flatten cell array
fclose(fid);
现在您可以使用来操作文本数据。例如,要查找包含字符串“Creation date”的注释行,可以执行以下操作:
idx = ~cellfun('isempty', regexp(C, "^\s*%.*Creation date"));
其中“^\s*%
匹配行首的百分号(%
)以及任何前导空格,*
匹配任何数量的字符,直到出现“创建日期”。不用说,您可以根据自己的喜好调整模式
结果变量
idx
在与模式匹配的行的位置存储一个逻辑(即布尔)向量,该向量带有“1”(您可以使用find(idx)
获得它们的显式数字索引)。接下来,您可以使用C(idx)过滤这些行
或使用for循环对它们进行迭代。我对您的文件格式有点困惑。是否每隔一行都以注释开头,还是您只是在此处注释这些行?谢谢您指出这一点。现在已经修复了。。
fid = fopen(filename);
nHeaderRows = 412;
headerCell = cell(nHeaderRows, 1);
for i=1:nHeaderRows
headerCell{i} = fgets(fid);
end
headerText = char(headerCell);