首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何清除命令窗口中的最后一行

如何清除命令窗口中的最后一行
EN

Stack Overflow用户
提问于 2012-01-12 03:59:10
回答 5查看 45.9K关注 0票数 20

我对正在运行的程序的进度很好奇,我打印了一些关于当前迭代的信息,例如:

代码语言:javascript
复制
for i = 1:N
    ...
    ...
    msg = sprintf('Processed %d/%d', i, N);
    display(msg)
end

我不想在单独的行上打印进度,相反,我希望最后一行替换前一行。我不想使用清除所有内容的clc

我知道'\b'可以清除最后一个字符(如退格键),并且我可以创建一个带有for循环的函数,该循环清除项目,直到最后一行之前的前一个新行。但是有没有更好的方法呢?如果不是,如何检查命令行的最后一个字符是否换行?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-12 04:27:39

不久前,我已经看过这个问题了。我注意到,在命令行(-nodesktop)中,\r字符(用于擦除最后一行)可以在matlab中使用,但在图形模式下则不适用。

我找到的最好的解决方案是这样做:

代码语言:javascript
复制
n=0;
for ...
  ...
  fprintf(repmat('\b',1,n));
  fprintf(msg);
  n=numel(msg);
end
票数 33
EN

Stack Overflow用户

发布于 2012-01-12 04:25:57

Yair Altman有一个a very nice example on his blog,告诉你如何使用退格键(\b)来做你想做的事情,但是用起来比你想象的要容易。将您的代码修改为类似于他的示例,您可以这样做:

代码语言:javascript
复制
reverseStr = '';
for i = 1:N
    ...
    ...
    msg = sprintf('Processed %d/%d', i, N);
    fprintf([reverseStr, msg]);
    reverseStr = repmat(sprintf('\b'), 1, length(msg));
end
票数 19
EN

Stack Overflow用户

发布于 2013-12-12 17:58:54

我使用'dispstat‘函数就是为了这个目的。它可以更新之前的输出,这是缺省的'disp‘的一个缺失函数。使用起来非常简单。可从此处下载:http://www.mathworks.com/matlabcentral/fileexchange/44673-overwritable-message-outputs-to-commandline-window

*示例用法:

代码语言:javascript
复制
 dispstat('','init'); % One time only initialization
 dispstat(sprintf('Begining the process...'),'keepthis','timestamp');
 for i = 97:100
     dispstat(sprintf('Progress %d%%',i),'timestamp');
     %doing some heavy stuff here
 end
 dispstat('Finished.','keepprev');

*输出:

代码语言:javascript
复制
11:25:37 Begining the process...
11:25:37 Progress 100%
Finished.

万事如意

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8825796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档