我已經在我的電腦中安裝了Matlab r2010a。xlsread和waitbar MATLAB
如何使用matlab中的xlsread函數並行讀取數據時在等待欄圖中顯示更新的進度?
非常感謝您的回答。
(EDIT)
我的意思是,雖然xlsread加載一個數據一個你可以看到在waitbar加載進度。
有什麼辦法嗎?
PD:我只是想從一個加載數據* .xls文件
我已經在我的電腦中安裝了Matlab r2010a。xlsread和waitbar MATLAB
如何使用matlab中的xlsread函數並行讀取數據時在等待欄圖中顯示更新的進度?
非常感謝您的回答。
(EDIT)
我的意思是,雖然xlsread加載一個數據一個你可以看到在waitbar加載進度。
有什麼辦法嗎?
PD:我只是想從一個加載數據* .xls文件
有幾個選項:
.mex
文件,並制定出不同版本的MATLAB沒有記錄的內存表示(可能相當困難,但我相信這是可能的一些調試器)。xlsread.m
,xlsreadCOM.m
和xlsreadXLSX.m
作爲departure.`myxlsread.m
如果你需要的是在連續xlsread
命令之間的循環更新waitbar
,這是非常容易的。1.
的.mex
文件的解決方案: 如果你想顯示一個xlsread
函數調用的進步,我相信事情變得相當複雜。首先,您需要有兩個線程,爲此您需要使用.mex
文件或其他方式。第二個問題是AFAIK 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
更新函數調用,如果在您的情況下版權問題不是一個問題(例如,你不分發代碼或當地法律允許)。我認爲修改或重新創建您的myxlsread.m
是最可行的方法。
3.
在一個循環的解決方案的xlsread
: 但是,如果你想要的是獨立的xlsread
函數調用之間更新waitbar
,那麼這是不是一個問題的話,那會是這樣的:
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
嗨@nrz這是我的一次。你介意告訴我在加載數據時,我應該怎麼做才能在'xlsread.m'內逐步獲取更新的變量? 非常感謝 –
什麼你的意思是「平行」? AFAIK,'xlsread'並不是固有的並行化。無論如何,我不認爲有辦法做到這一點,因爲你必須直接修改xlsread來顯示進度。 – plasma