我已经在我的电脑上安装了Matlab r2010a。
如何在使用matlab中的xlsread函数并行读取数据时,在等待条图中显示更新的进度?
非常感谢你的回答。
(编辑)
我的意思是,当xlsread一个一个地加载数据时,您可以在服务条中看到加载进度。
有办法吗?
PD:我只想从一个*.xls文件中加载数据
发布于 2012-06-17 07:26:53
有几种选择:
.mex文件并计算出不同的.mex版本的无文档内存表示(可能相当困难,但我相信使用一些调试器是可能的)。xlsread.m、xlsreadCOM.m和xlsreadXLSX.m创建自己的myxlsread.m,作为离开点。H 29H 110如果您只需要在连续的xlsread命令之间的循环中更新d11,这非常容易。H 213G 2141. .mex文件解决方案:如果您想显示单个xlsread函数调用的进度,我相信事情会变得相当复杂。首先,您需要有两个线程,为此您需要使用.mex文件或其他一些方法。第二个问题是,AFAIK xlsread不发送任何进度信号,这意味着您的.mex函数需要以某种方式获取变量(单元格数组或矩阵等)的内存地址。所谓的xlsread函数。如果这是您想要的,那么这个文档可能是有用的:http://undocumentedmatlab.com/blog/matlabs-internal-memory-representation/确实注意到MATLAB的内部内存表示是完全没有文档化的,并且可能在不同的waitbar版本中发生变化,因此对于单个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});
endhttps://stackoverflow.com/questions/11069221
复制相似问题