Azzera filtri
Azzera filtri

データストア(tab​ularTextDa​tastore)の仕​様(readメソッド​の限界値?)

4 visualizzazioni (ultimi 30 giorni)
yuuji yamada
yuuji yamada il 29 Nov 2018
Commentato: yuuji yamada il 20 Dic 2018
matlab 2018aを使用しています。
データストア(tabularTextDatastore)を使用してCSVファイルの読込み処理を作成しました。
NumHeaderLinesとReadSizeを指定し、特定の位置から720000行のデータを読み込む
処理を作成しました。しかし、readメソッドでデータを読み込んだところ690000行ぐらいしか読み込むことが
できませんでした。readメソッドで読み込めるデータの数には限界があるのでしょうか

Risposta accettata

Kazuya
Kazuya il 5 Dic 2018
Modificato: Kazuya il 5 Dic 2018
read メソッドで読み取るデータの数に上限がある、、仕様ではないと思いますが何が原因なんでしょうね。もしメモリに収まらなくて読み込みを途中でやめている・・なんて機能が動いていれば
memory
関数を実行してみて、MATLABが使用できるメモリの量を確認してみるとヒントになるかもしれません。
ちなみに readall メソッドだとどうなりますか?
  3 Commenti
michio
michio il 18 Dic 2018
ReadSize で指定する数字は必ずその行数だけが読み取れるという仕様になっておらず、様々な要因で変化します。今回ご報告いただいたように数十万行を読み込む場合も多少ばらつくことが確認されておりますし、例えば 100 行数のデータを持つ csv ファイルを読み取る場合には、一度の read コマンドで読み取るデータ行数の上限は 100 となり、ファイルをまたいでの一度の読み取りは現時点(R2018b)では実行できません。ご要望は開発サイドに上げさせていただきました。
ご面倒ですが、下記の関数を read の代わりに使っていただければ、CursorSize で指定した数だけ読み込んだデータを返すことができますので、活用いただけますと幸いです。要求した行数を読み取るまで繰り返し read を実行する処理にしております。
function data = myread(ds, CursorSize)
%
% workaround for read method of datastore
% concatenate vertically until the height of data achieves to the required size, CursorSize
%
ds.ReadSize = CursorSize;
data = read(ds);
while height(data) < CursorSize
ImportedSize = height(data);
ds.ReadSize = CursorSize - ImportedSize;
try
adddata = read(ds);
data = vertcat(data,adddata); %#ok
catch ME
if ~strcmp(ME.identifier,'MATLAB:datastoreio:splittabledatastore:noMoreData');
errordlg('Data processing has been failed.');
end
return; % achieves the end of datastore
end
end
end % End-of-myre
yuuji yamada
yuuji yamada il 20 Dic 2018
御回答ありがとうございます。
ご提示いただいたコードで対応したいと思います。
ありがとうございました。

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!