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

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

Accepted Answer

Kazuya
Kazuya on 5 Dec 2018
Edited: Kazuya on 5 Dec 2018
read メソッドで読み取るデータの数に上限がある、、仕様ではないと思いますが何が原因なんでしょうね。もしメモリに収まらなくて読み込みを途中でやめている・・なんて機能が動いていれば
memory
関数を実行してみて、MATLABが使用できるメモリの量を確認してみるとヒントになるかもしれません。
ちなみに readall メソッドだとどうなりますか?
  3 Comments
michio
michio on 18 Dec 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 on 20 Dec 2018
御回答ありがとうございます。
ご提示いただいたコードで対応したいと思います。
ありがとうございました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!