使用fopen/fclose在Matlab中导入CSV文件,该文件具有不同长度的注释,且没有特定的前置字符
我需要将一个CSV文件导入matlab,该文件有160000行和25列。第33栏有一些行的注释。注释的长度不一,并且是文本性的,例如,注释可能会读到(不带引号)由于抑制而导致的死亡率(这是一个森林资源清查数据库) 前四列表示树测量的地点和时间 该计划的最终目标是将文件中的信息整合成独特的较小文件,每个文件将以独特的地点和时间组合保存所有树的数据 目前我使用的进口策略是使用fopen/fclose在Matlab中导入CSV文件,该文件具有不同长度的注释,且没有特定的前置字符,matlab,Matlab,我需要将一个CSV文件导入matlab,该文件有160000行和25列。第33栏有一些行的注释。注释的长度不一,并且是文本性的,例如,注释可能会读到(不带引号)由于抑制而导致的死亡率(这是一个森林资源清查数据库) 前四列表示树测量的地点和时间 该计划的最终目标是将文件中的信息整合成独特的较小文件,每个文件将以独特的地点和时间组合保存所有树的数据 目前我使用的进口策略是 fid = fopen('TP07303_v1.csv','r'); tline = fgetl(fid); % split
fid = fopen('TP07303_v1.csv','r');
tline = fgetl(fid);
% split the title line (header) and call it A
A(1,:) = regexp(tline,'\,','split');
% parse and read the rest of the file
ctr = 1;
while(~feof(fid))
if ischar(tline)
ctr = ctr + 1;
tline = fgetl(fid);
A(ctr, :) = regexp(tline,'\,','split');
else
break;
end
end
fclose(fid);
但当我在第一行发表评论时,它就遇到了障碍。我做的任何事情都不需要评论,我很高兴不完全导入该专栏。有什么方法可以做到这一点吗?我对列数(25或33+?)也感到困惑,但如果每行的逗号数不同,这就是问题的原因。这就是您不使用dlmread的原因吗 此外,ischar似乎是多余的,因为tline将始终是一个字符,除非您位于文件的末尾,但您在该条件下循环。实际上,您正在连续两次检查同一事物
while(~feof(fid))
ctr = ctr + 1;
tline = fgetl(fid);
tmp = regexp(tline,'\,','split');
% make sure to not assign more than 25 elements to this row of A
A(ctr, :) = tmp(1:25);
if numel(tmp)>25
% do something with the rest
end
end
而且永远不会少于25个元素,对吗?有什么理由不能将
textscan
与公认的长格式字符串一起使用吗?您可以在格式字符串的末尾使用%*[^\n]
跳过其余的列…”有约160000行和25列。第33列有“它是哪一列?”?它有25列还是33列?您可以发布几行示例数据吗?