データストア(tabularTextDatastore)の仕様(readメソッドの限界値?)
    1 次查看(过去 30 天)
  
       显示 更早的评论
    
matlab 2018aを使用しています。
データストア(tabularTextDatastore)を使用してCSVファイルの読込み処理を作成しました。
NumHeaderLinesとReadSizeを指定し、特定の位置から720000行のデータを読み込む
処理を作成しました。しかし、readメソッドでデータを読み込んだところ690000行ぐらいしか読み込むことが
できませんでした。readメソッドで読み込めるデータの数には限界があるのでしょうか
0 个评论
采纳的回答
  Kazuya
      
 2018-12-5
        
      编辑:Kazuya
      
 2018-12-5
  
      read メソッドで読み取るデータの数に上限がある、、仕様ではないと思いますが何が原因なんでしょうね。もしメモリに収まらなくて読み込みを途中でやめている・・なんて機能が動いていれば
memory
関数を実行してみて、MATLABが使用できるメモリの量を確認してみるとヒントになるかもしれません。
ちなみに readall メソッドだとどうなりますか?
3 个评论
  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
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
