2

約160,000行25列のCSVファイルをmatlabにインポートする必要があります。33番目の列には、いくつかの行についての解説があります。コメントの長さはさまざまで、テキストです。たとえば、コメントは(引用符なしで)「抑制による死亡率」(森林インベントリデータベース)と表示される場合があります。

最初の4列は、樹木測定の場所と時間を表します。

このプログラムの最終的な目標は、ファイル内の情報を一意の小さなファイルに統合することです。各ファイルには、サイトと時間の一意の組み合わせですべてのツリーのデータが保持されます。

現在、私が使用しているインポート戦略は

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を使用していない理由ですか?

また、ファイルの最後にいない限り、tline は常に char になるため、 ischar は冗長に見えますが、その条件でループしています。実際には、同じことを 2 回続けてチェックしています。

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 に答える