Matlab:如何阅读ascii文件的注释部分

时间:2013-07-02 16:02:28

标签: matlab comments text-parsing

我有一个ascii文件,其前几百行被注释(后跟数据),提供有关数据的一些信息。例如,这些是我从大量注释掉的行中删除的几行: enter image description here

现在我只使用load作为:

来阅读没有评论的数据
filename = uigetfile('*.dat', 'Select Input data');
Data = load(filename, '-ascii');

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

2 个答案:

答案 0 :(得分:2)

使用textscan将行读入单元格数组:

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

现在您可以使用regexp来操作文本数据。例如,要查找包含字符串“Creation date”的注释行,您可以执行以下操作:

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

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

结果变量idx在符合模式的行的位置存储一个逻辑(布尔)向量,其中“1”s(您可以使用{获得它们的显式数字索引) {1}})。接下来,您可以使用find(idx)过滤这些行,或者使用for循环迭代它们。

答案 1 :(得分:0)

fid = fopen(filename); 
nHeaderRows = 412; 
headerCell = cell(nHeaderRows, 1); 
for i=1:nHeaderRows 
    headerCell{i} = fgets(fid); 
end 
headerText = char(headerCell);