我有一个需要一些时间才能运行的 Matlab 函数,我想向用户展示正在取得的进展。disp
每隔 5% 左右查看一次进度会使屏幕过于混乱,因为之前的文本不会被删除。
如何解决这个问题?命令窗口中还有其他重要信息,因此清除它是不可能的。
我有一个需要一些时间才能运行的 Matlab 函数,我想向用户展示正在取得的进展。disp
每隔 5% 左右查看一次进度会使屏幕过于混乱,因为之前的文本不会被删除。
如何解决这个问题?命令窗口中还有其他重要信息,因此清除它是不可能的。
在命令行窗口中显示进度也是可能的(而且可能更容易)。我在http://undocumentedmatlab.com/blog/command-window-text-manipulation/上找到了一个非常简单、快速实施的解决方案。
reverseStr = '';
for idx = 1 : someLargeNumber
% Do some computation here...
% Display the progress
percentDone = 100 * idx / someLargeNumber;
msg = sprintf('Percent done: %3.1f', percentDone); %Don't forget this semicolon
fprintf([reverseStr, msg]);
reverseStr = repmat(sprintf('\b'), 1, length(msg));
end
如果您嵌入此代码,命令行将显示(例如):“Percent done: 27.8”,而无需每次迭代都输入换行符!
您可以waitbar
为此使用功能。请参阅waitbar 上的 MATLAB 文档。
看看这个: http: //www.mathworks.com/matlabcentral/fileexchange/3607-progressbar和 http://www.mathworks.com/matlabcentral/fileexchange/26773-progress-bar
基本上@Ergodicity 所写的内容是正确的,如果您将标准输出设置为缓冲(顺便说一句),则仅适用于 Octave,您必须通过 page_output_immediately(1) 启用它;有关更多octave 文档,请参阅此页面:终端输出
对提议的代码进行非常简短的修改:
reverseStr = '';
fprintf('Percent done: ');
for idx = 1 : someLargeNumber
% Do some computation here...
% Display the progress
percentDone = 100 * idx / someLargeNumber;
msg = sprintf('%3.1f', percentDone); %Don't forget this semicolon
fprintf([reverseStr, msg]);
reverseStr = repmat(sprintf('\b'), 1, length(msg));
end