csv fileを読み込めない

8 vues (au cours des 30 derniers jours)
satosi mukaida
satosi mukaida le 4 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 commentaire
michio
michio le 7 Sep 2018
読みやすくなるようコード表示を編集いたしました。

Connectez-vous pour commenter.

Réponse acceptée

Etsuo Maeda
Etsuo Maeda le 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 commentaires
satosi mukaida
satosi mukaida le 7 Sep 2018
回答ありがとうございます 使用しているデータを添付しました ドキュメンテーションをよむかぎり 問題がないと思うのですが依然として読み込めません
satosi mukaida
satosi mukaida le 7 Sep 2018
解決しました引数の範囲が間違っていました

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Environment and Settings dans Help Center et File Exchange

Produits


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by