1

.txtデータを含むファイル (名前は variable として保存されます)を持つことを検討してくださいfName(2 つのヘッダー行、5 行、2050 列のデータ: 1 番目の列は時間:分:秒.ミリ秒の形式の時間、2 番目の列はタイムスタンプです) 、残りの列はすべて数値データの行列です。

ファイルはここから一時的に入手できます。ファイルの内容のプレビュー (2050 の 6 列):

My data
Number of Pixels per Row: 2048
12:23:14.305    1435742594305   -1.39   1.61    0.61    3.61    ...
12:23:14.815    1435742594815   -1.56   -1.56   -1.56   2.44    ...
12:23:15.326    1435742595326   -0.17   0.83    -0.17   4.83    ...
12:23:15.837    1435742595837   -0.22   -0.22   -2.22   0.78    ...
12:23:16.351    1435742596351   -1.17   -0.17   -1.17   4.83    ...

次のコードを使用してデータを読み取ります。

skipRows = 2;

% # Read file:

fileID = fopen(fName,'r');
RawData = textscan(fileID,['%s\t','%f\t',repmat('%f\t',1, 2048)], 'headerlines',skipRows);
fclose(fileID);

% # Extract data:

Time      = RawData{1}; 
Timestamp = RawData{2};
data = cell2mat(RawData(3:end));

% # Display data:
Time
Timestamp

結果 - 5 行ではなく、2 行ごとに欠落データを含む 10 行があります。

Time = 
    '12:23:14.305'
    [1x1 char]
    '12:23:14.815'
    [1x1 char]
    '12:23:15.326'
    [1x1 char]
    '12:23:15.837'
    [1x1 char]
    '12:23:16.351'
    [1x1 char]

Timestamp =
   1.0e+12 *
    1.4357
       NaN
    1.4357
       NaN
    1.4357
       NaN
    1.4357
       NaN
    1.4357
       NaN

私のコードにエラーがありますか? データを正しく読み取るにはどうすればよいですか?

4

1 に答える 1

2

inout ファイル全体に対してコードをテストしましたが、同じエラーが発生しました。

@excaza がコメントで書いたように、問題は入力ファイルの書き方に関連しているようです。

次のように、文字列\rの末尾にa を追加することで問題を解決できます。format

RawData = textscan(fileID,['%s\t','%f\t',repmat('%f\t',1, 2048),'\r'], 'headerlines',skipRows);

注意:あなたが投稿したコードでは、次のように書いています:

data = cell2mat(Raw(3:end));

私はそれがあったと仮定します:

data = cell2mat(RawData(3:end));

お役に立てれば。

于 2015-08-13T17:01:10.520 に答える