csv fileを読み込めない
28 views (last 30 days)
Show older comments
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]);
では作動していましたどう変更すれば作動するでしょうか
Accepted Answer
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
More Answers (0)
See Also
Categories
Find more on Introduction to Installation and Licensing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!