3

多くの csv ファイルを読み取り、列 1、6、8、および 20 を抽出しています。csv は二重引用符を使用しているため、区切り文字は '","' です。一部のデータにフラグが立てられない限り、これはうまく機能しています。データ例:

 Date            Year    Month   Day    Flag     Min T    Flag   Max T

 30/11/2007     2007    11       30     [Blank]  -14.9   [Blank]  -20.3

 01/12/2007     2007    12       1         *     -16     [Blank]  -20.1

スクリプトは * まで完全に読み取り、すべてがシフトされるため、取得できるのは NaN だけです。

fid1 = fopen(File, 'r');
Date = textscan(fid1, '%q %*s %*[^\n]', 'Delimiter', ',', 'HeaderLines', 25);
fclose(fid1);
Date = datenum(Date{1, 1}, 'yyyy-mm-dd');
fid1 = fopen(File, 'r');

Data = textscan(fid1, '%*s %*s %*s %*s %f %f %*s %*s %*s %*s %*s %f %*[^\n]', 
'Delimiter', '","', 'HeaderLines', 25,'treatAsEmpty', {'M', '*', 'E', 'T', 'A', 'C', 
'L', 'N', 'Y', 'S', 'F'}, 'multipledelimsasone', true);
fclose(fid1);

だから私は私の質問は次のとおりだと思います:

区切り文字が機能するように、各ファイルをループで事前にフォーマットしてフラグを削除するか、textscan を変更してフラグをすべて無視することはできますか?

ご意見ありがとうございます。

4

1 に答える 1

0

「フラグ」はアスタリスクですか?次のようなターミナルコマンドを使用できます

Date = textscan(system(['sed "s/\*/ /g" ' File ]));

アスタリスクを削除して結果をスキャンします。

于 2013-01-14T22:23:08.220 に答える