2

我需要将一个 CSV 文件导入到 matlab 中,该文件有 ~160,000 行和 25 列。第 33 列对某些行进行了评论。评论有不同的长度,并且是文本的,例如,评论可能读作(没有引号)“因压制而死亡”(它是一个森林清单数据库)。

前四列代表树木测量的地点和时间。

该程序的最终目标是将文件中的信息整合到独特的小文件中,每个文件都将保存所有树木数据的独特地点和时间组合。

目前我使用的导入策略是

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);

但是当我到达第一行的评论时,它就卡住了。我不需要评论我正在做的任何事情,并且很高兴不完全导入该列。有没有办法做到这一点?

4

1 回答 1

0

我也对列数(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 个元素,对吧?

于 2012-12-13T13:17:43.163 回答