Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:如何读取ascii文件的注释部分_Matlab_Comments_Text Parsing - Fatal编程技术网

Matlab:如何读取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

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

目前,我仅使用
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);