我有一个ascii文件,其前几百行被注释(后跟数据),提供有关数据的一些信息。例如,这些是我从大量注释掉的行中删除的几行:
现在我只使用load
作为:
filename = uigetfile('*.dat', 'Select Input data');
Data = load(filename, '-ascii');
如何阅读评论行(在数据开始之前结束)并根据某些标识从所有评论中选择一些评论,例如程序名称和版本,创建日期等?
答案 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);