1

MATLAB で load() 関数を使用して、テキスト ファイルからデータを読み込もうとしています。ただし、テキスト ファイルのすべての行は「...」で終わります。データ ファイルは MATLAB によって生成されたものではないため、楕円のソースを制御することはできません。

読み込んでいるデータファイルは次のようになります。

11191425        NaN     NaN     0.0 ...
11191426        NaN     NaN     0.0 ...
11191427        NaN     NaN     0.0 ...
11191428        NaN     NaN     0.0 ...
11191429     2280.5  1910.1   455.0 ...
11191430     2280.5  1910.1   455.0 ...
11191431     2298.0  1891.1   454.0 ...
11191432     2317.3  1853.7   453.0 ...
11191433     2335.6  1811.1   458.0 ...
11191434     2350.6  1769.8   466.0 ...
11191435     2365.3  1729.7   475.0 ...
11191436     2379.5  1691.2   485.0 ...
11191437     2378.3  1647.6   492.0 ...
11191438     2375.4  1621.3   499.0 ...
11191439     2372.7  1598.5   499.0 ...
11191440     2372.7  1598.5   499.0 ...
11191441        NaN     NaN     0.0 ...
11191442      294.9  1283.5  1163.0 ...
11191443      294.9  1283.5  1163.0 ...

実際の長さは 100,000 行を超えていますが、おわかりいただけたでしょうか。load() コマンドを使用すると、各行の末尾に「...」があるため、エラーがスローされます。私が探しているのは、最初の 4 つの列を読むことだけです。

最後に不正な楕円の列を完全に省略しながら、データをロードする最も効率的な方法は何でしょうか? 必須ではありませんが、システムにテキスト ファイル全体を 2 回解析させることを伴わない方法が望ましいでしょう。

4

1 に答える 1

6

load を使用する代わりにtextscanを使用すると、これは非常に簡単です。その最後の列を文字列列として扱い、無視することができます。

fid = fopen('data.txt');
data = textscan(fid,'%d %f %f %f %s');
fclose(fid);

次に、一緒に保持する列を連結することにより、出力を単一の行列にすることができます。

data = [data{1:4}];

5 番目の列は「...」文字列で埋められています。あなたはそれを無視することができます。

于 2012-08-15T18:09:57.053 に答える