コンピュータに Matlab r2010a をインストールしました。
matlabのxlsread関数を使用してデータが並行して読み取られている間に、更新された進行状況をウェイトバーの図に表示するにはどうすればよいですか?
答えてくれてどうもありがとう。
(編集)
つまり、xlsreadがデータを 1 つずつロードしている間、 waitbarでロードの進行状況を確認できます。
何か方法はありますか?
PD: 1 つの *.xls ファイルからデータをロードしたいだけです
コンピュータに Matlab r2010a をインストールしました。
matlabのxlsread関数を使用してデータが並行して読み取られている間に、更新された進行状況をウェイトバーの図に表示するにはどうすればよいですか?
答えてくれてどうもありがとう。
(編集)
つまり、xlsreadがデータを 1 つずつロードしている間、 waitbarでロードの進行状況を確認できます。
何か方法はありますか?
PD: 1 つの *.xls ファイルからデータをロードしたいだけです
いくつかのオプションがあります。
.mex
ファイルを作成し、さまざまな MATLAB バージョンの文書化されていないメモリ表現を解決します (おそらく非常に難しいですが、一部のデバッガーでは可能だと思います)。myxlsread.m
を使用して独自に作成しxlsread.m
、出発点として使用します。xlsreadCOM.m
xlsreadXLSX.m
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.m
をxlsreadXLSX.m
直接変更してwaitbar
update 関数呼び出しを追加します。コードを配布しないか、地域の法律で許可されていない)。変更または再作成するmyxlsread.m
ことが最も実行可能な方法だと思います。
3.
ループ内ソリューション: ただし、個別の関数呼び出し間でxlsread
更新することだけが必要な場合、それはまったく問題ではなく、次のようになります。waitbar
xlsread
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