MATLAB Answers

0

大容量csvの切り取り

Jo Sasaki さんによって質問されました 2019 年 7 月 11 日
最新アクティビティ Jo Sasaki さんによって コメントされました 2019 年 7 月 16 日
1から3000001行まで存在するcsvデータを、1データずらしで3001ずつ切り取りcsvで保存したいのですが、下記のcsvread関数ではcsvreadのところでnの変数を読み取ってくれないのですがこれに代わるデータの切り取り方はありますでしょうか?
1つのcsvデータが約14MBですので全て書き出すとなるとメモリの容量不足になりそうですが、メモリの容量は無視していただいて構いません。
書き出されるデータは連番で約300万近いデータが書き出されると思います。
n = 1;
fileNum = 1;
filename = 'testfilename.csv';
while true
sig = csvread(filename,n-1,0(n-1,0,n+3000,0));
L = length(sig); %L = 3000001
Overwrap = 1; %1データずつ動く
pickupLength = 3001;
fileName = ['fftcsvtitle_' num2str(fileNum) '.csv'];
csvwrite(fileName, sig);
fileNum = fileNum + 1;
n = n + bufOverwrap;
if n > L-Length
break
end
end

  0 件のコメント

サインイン to comment.

2 件の回答

Shoumei
Answer by Shoumei
on 12 Jul 2019

どんなエラーが出てますか?
csvreadの引数にある、0(n-1,0,n+3000,0) ってどんな値を入れたいのでしょう?
引数にどんな値が入っているのか自分で確認してみると自己解決出来ると思いますよ。

  0 件のコメント

サインイン to comment.


Shoumei
Answer by Shoumei
on 12 Jul 2019

大規模データの取り扱いにはdatastoreが有効です。
例えば
ds = datastore('testfilename.csv') % ここではデータは全て読み込まれない
ds.ReadSize = 3000 % データを読み込むチャンク数を設定
sig1 = read(ds) % 3000サンプル読み込み
sig2 = read(ds) % 次の3000サンプル読み込み
% ....以下続く

  1 件のコメント

Jo Sasaki on 16 Jul 2019
datastore関数は便利そうですね、使用して試したいと思います。
質問内容は自分で解決しました。
たくさん間違っていてお恥ずかしいばかりです。
当方プログラミングは初心者なので今後ともご教授お願い致します。

サインイン to comment.