我很好奇正在运行的程序的进度,我打印了一些有关当前迭代的信息,例如:
for i = 1:N
...
...
msg = sprintf('Processed %d/%d', i, N);
display(msg)
end
Run Code Online (Sandbox Code Playgroud)
我不想在单独的行上打印进度,而是希望最后一行替换上一行.我不想用clc它来清除所有内容.
我知道'\b'可以清除最后一个字符(比如退格键),我可以创建一个带有for循环的函数,该函数清除项目直到前一个新行之前.但是有更好的方法吗?如果没有,我如何检查命令行中的最后一个字符是否是新行?
Oli*_*Oli 33
我刚才看过这个问题.而且我注意到字符\r(用于擦除最后一行)在命令行(-nodesktop)中使用matlab,但不适用于图形模式...
我找到的最佳解决方案是做类似的事情:
n=0;
for ...
...
fprintf(repmat('\b',1,n));
fprintf(msg);
n=numel(msg);
end
Run Code Online (Sandbox Code Playgroud)
gno*_*ice 19
Yair Altman 在他的博客上有一个很好的例子,你可以使用退格控制字符(\b)来做你想做的事情,但比你考虑的更容易.将代码修改为类似于他的示例,您可以执行以下操作:
reverseStr = '';
for i = 1:N
...
...
msg = sprintf('Processed %d/%d', i, N);
fprintf([reverseStr, msg]);
reverseStr = repmat(sprintf('\b'), 1, length(msg));
end
Run Code Online (Sandbox Code Playgroud)