Azzera filtri
Azzera filtri

大容量csvの切り取り

16 visualizzazioni (ultimi 30 giorni)
Jo Sasaki
Jo Sasaki il 11 Lug 2019
Commentato: Jo Sasaki il 16 Lug 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

Risposta accettata

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

Accedi per commentare.

Più risposte (1)

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

Categorie

Scopri di più su 大きなファイルとビッグ データ in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!