9

我有一个需要一些时间才能运行的 Matlab 函数,我想向用户展示正在取得的进展。disp每隔 5% 左右查看一次进度会使屏幕过于混乱,因为之前的文本不会被删除。

如何解决这个问题?命令窗口中还有其他重要信息,因此清除它是不可能的。

4

4 回答 4

17

在命令行窗口中显示进度也是可能的(而且可能更容易)。我在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”,而无需每次迭代都输入换行符!

于 2013-12-31T15:04:54.773 回答
8

您可以waitbar为此使用功能。请参阅waitbar 上的 MATLAB 文档

于 2012-06-15T12:34:33.600 回答
0

基本上@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
于 2017-03-02T11:00:24.380 回答