大容量csvの切り取り

7 vues (au cours des 30 derniers jours)
Jo Sasaki
Jo Sasaki le 11 Juil 2019
Commenté : Jo Sasaki le 16 Juil 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

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (1)

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

Catégories

En savoir plus sur データのインポートと解析 dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!