0

コンピュータに Matlab r2010a をインストールしました。

matlabのxlsread関数を使用してデータが並行して読み取られている間に、更新された進行状況をウェイトバーの図に表示するにはどうすればよいですか?

答えてくれてどうもありがとう。

(編集)

つまり、xlsreadがデータを 1 つずつロードしている間、 waitbarでロードの進行状況を確認できます。

何か方法はありますか?

PD: 1 つの *.xls ファイルからデータをロードしたいだけです

4

1 に答える 1

0

いくつかのオプションがあります。

  1. 難しいオプション:.mexファイルを作成し、さまざまな MATLAB バージョンの文書化されていないメモリ表現を解決します (おそらく非常に難しいですが、一部のデバッガーでは可能だと思います)。
  2. それを行う簡単な方法:myxlsread.mを使用して独自に作成しxlsread.m、出発点として使用します。xlsreadCOM.mxlsreadXLSX.m
  3. waitbar連続するxlsreadコマンド間のループで更新するだけでよい場合、それは非常に簡単です。

1.ファイル ソリューション: 1つの関数呼び出し.mexの進行状況を表示したい場合は、かなり複雑になると思います。xlsreadまず、2 つのスレッドが必要です。そのためには、.mexファイルまたはその他の手段を使用する必要があります。2番目の問題は、AFAIKxlsreadが進行状況のシグナルを送信しないことです。つまり、.mex関数は、呼び出された関数の変数(セル配列または行列など)のメモリアドレスを何らかの形で取得する必要がありxlsreadます。これが必要な場合は、次のドキュメントがおそらく役に立ちます: http://undocumentedmatlab.com/blog/matlabs-internal-memory-representation/MATLAB の内部メモリ表現は完全に文書化されておらず、いつでも変更される可能性があり、異なる MATLAB バージョンでは異なるため、単一の場合、waitbarこれは大変な作業になることに注意してください。

2.myxlsread.m解決策: これは組み込みではxlsreadない (少なくとも MATLAB R2012a には含まれていない) ため、コードを読み取って MATLAB デバッガーで問題なくトレースできます。組み込みではないため、可能性のあるオプションは、独自のカスタムを作成することです。myxlsread.m例としてxlsread.m、またはそれらxlsreadCOM.mxlsreadXLSX.m直接変更してwaitbarupdate 関数呼び出しを追加します。コードを配布しないか、地域の法律で許可されていない)。変更または再作成するmyxlsread.mことが最も実行可能な方法だと思います。

3.ループ内ソリューション: ただし、個別の関数呼び出し間でxlsread更新することだけが必要な場合、それはまったく問題ではなく、次のようになります。waitbarxlsread

XlsFilenamesCellArray = { 'file1.xls', 'file2.xls', 'file3.xls' };
NumberOfFiles = size(XlsFilenamesCellArray, 2)

h = waitbar(0, '1', 'Name', 'xlsread loop progress', 'CreateCancelBtn', 'setappdata(gcbf,     ''canceling'', 1)');

for Index = 1:size(XlsFilenamesCellArray, 2)
    waitbar(Index/NumberOfFiles, h, sprintf('reading .xls file %d of %d', Index, NumberOfFiles));
    [num{Index}, text{Index}, raw{Index}] = xlsread(XlsFilenamesCellArray{Index});
end
于 2012-06-17T07:26:53.040 に答える