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

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

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

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

Start Hunting!