大容量csvの切り取り
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Shoumei
le 12 Juil 2019
大規模データの取り扱いにはdatastoreが有効です。
例えば
ds = datastore('testfilename.csv') % ここではデータは全て読み込まれない
ds.ReadSize = 3000 % データを読み込むチャンク数を設定
sig1 = read(ds) % 3000サンプル読み込み
sig2 = read(ds) % 次の3000サンプル読み込み
% ....以下続く
Plus de réponses (1)
Shoumei
le 12 Juil 2019
どんなエラーが出てますか?
csvreadの引数にある、0(n-1,0,n+3000,0) ってどんな値を入れたいのでしょう?
引数にどんな値が入っているのか自分で確認してみると自己解決出来ると思いますよ。
0 commentaires
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!