Borrar filtros
Borrar filtros

大容量csvの切り取り

6 visualizaciones (últimos 30 días)
Jo Sasaki
Jo Sasaki el 11 de Jul. de 2019
Comentada: Jo Sasaki el 16 de Jul. de 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

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (1)

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

Categorías

Más información sobre 大きなファイルとビッグ データ en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!