大容量csvの切り取り

7 Ansichten (letzte 30 Tage)
Jo Sasaki
Jo Sasaki am 11 Jul. 2019
Kommentiert: Jo Sasaki am 16 Jul. 2019
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

Akzeptierte Antwort

Shoumei
Shoumei am 12 Jul. 2019
大規模データの取り扱いにはdatastoreが有効です。
例えば
ds = datastore('testfilename.csv') % ここではデータは全て読み込まれない
ds.ReadSize = 3000 % データを読み込むチャンク数を設定
sig1 = read(ds) % 3000サンプル読み込み
sig2 = read(ds) % 次の3000サンプル読み込み
% ....以下続く
  1 Kommentar
Jo Sasaki
Jo Sasaki am 16 Jul. 2019
datastore関数は便利そうですね、使用して試したいと思います。
質問内容は自分で解決しました。
たくさん間違っていてお恥ずかしいばかりです。
当方プログラミングは初心者なので今後ともご教授お願い致します。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

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

Kategorien

Mehr zu データのインポートと解析 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!