csv fileを読み込めない

46 views (last 30 days)
satosi mukaida
satosi mukaida on 4 Sep 2018
Commented: satosi mukaida on 7 Sep 2018
%フォルダ内のCSVファイルを読み込み
files = dir('*.csv');
%出力用フォルダがなければ作成
if
exist('output') == 0
mkdir 'output';
end
for n=1:length(files);
%ファイルの情報の取得
[path, name, ext] = fileparts(files(n).name);
%データの読み込みと分割
time=csvread(files(n).name, 5, 0, [5 0 2052 0]);
ax=csvread(files(n).name, 5, 1, [5 1 2052 1]);
ay=csvread(files(n).name, 5, 2, [5 2 2052 2]);
az=csvread(files(n).name, 5, 3, [5 3 2052 3]);
%ワークスペースの変数にデータをコピー
eval(['Time', int2str(n), ' = time;']);
eval(['Ax', int2str(n), ' = ax;']);
eval(['Ay', int2str(n), ' = ay;']);
eval(['Az', int2str(n), ' = az;']);
%outputフォルダに書き出し
csvwrite(strcat('output\', name, 'time.csv'), time);
csvwrite(strcat('output\', name, 'Ax.csv'), ax);
csvwrite(strcat('output\', name, 'Ay.csv'), ay);
csvwrite(strcat('output\', name, 'Az.csv'), az);
end
実行すると
エラーメッセージ
エラー: dlmread (line 165)
内部サイズの不一致
エラー: csvread (line 50)
m=dlmread(filename, ',', r, c, rng);
エラー: csv_read_ind (line 14)
time=csvread(files(n).name, 5, 0, [5 0 2052 0]);
が返ってきます 以前使用していた
%データの読み込みと分割
time=csvread(files(n).name, 4, 0, [4 0 515 0]);
ax=csvread(files(n).name, 4, 1, [4 1 515 1]);
ay=csvread(files(n).name, 4, 2, [4 2 515 2]);
az=csvread(files(n).name, 4, 3, [4 3 515 3])
では作動していましたどう変更すれば作動するでしょうか
  1 Comment
michio
michio on 7 Sep 2018
読みやすくなるようコード表示を編集いたしました。

Sign in to comment.

Accepted Answer

Etsuo Maeda
Etsuo Maeda on 7 Sep 2018
コードとエラーメッセージだけでなく、読み込み対象のデータもつけておけば回答を得やすくなるかもしれませんね。
少し頭を使って考えると、簡単に答えにたどり着くことができます。
時間 = csvread (ファイル (n). 名前, 4, 0, [4 0 515 0]);
では正しくデータが読み込めていたが、
時間 = csvread (ファイル (n). 名前, 5, 0, [5 0 2052 0]);
ではエラーとなったわけですから、変更した箇所であるcsvreadの2番目の引数か4番目の引数、もしくは両方に問題があります。
doc csvread
M = csvread(filename, R1, C1, [R1 C1 R2 C2])
で引数を確認すると、変更した箇所はR1“行の開始オフセット”、R2“行の終了オフセット”ということが分かります。
手元で適当なcsvファイルを生成して動作させてみると、R2が実際に格納されている行数よりも多いと同じエラーが発生します。
エラー: dlmread (line 165)
内部サイズの不一致
エラー: csvread (line 50)
m=dlmread(filename, ',', r, c, rng);
エラー: untitled (line 13)
time=csvread(files(n).name, 5, 0, [5 0 2052 0]);
R2とC2を指定するということは、予めデータ数が分かっているはずですから、2052が正しい数値なのかどうかを確認してみてください。
エラーが出た場合は、まずはドキュメンテーションで関数の仕様を確認してみましょう。
(というよりは、引数を変える前にドキュメンテーションを確認しましょう・・・)
エラー再現用csvデータ例
Skip, Skip, Skip, Skip
0,34,23,52
1,52,65,60
エラー再現用コード例
files = dir('*.csv');
[path, name, ext] = fileparts(files.name);
R1 = 1;
R2 = 2; % 3以上で内部サイズ不一致のエラー
time=csvread(files.name, R1, 0, [R1 0 R2 0]);
HTH
  2 Comments
satosi mukaida
satosi mukaida on 7 Sep 2018
解決しました引数の範囲が間違っていました

Sign in to comment.

More Answers (0)

Products


Release

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by