Effacer les filtres
Effacer les filtres

How do I overwrite text in the command window?

86 vues (au cours des 30 derniers jours)
Kyle Poe
Kyle Poe le 10 Juil 2017
I am trying to write a counter that uses the format "processing subject ### of 123", where the ### changes in the command window upon every subject change. I know this could be accomplished in a loop with something like
fprintf('processing subject 000 of 123')
for number in 1:123
fprintf('\b\b\b\b\b\b\b\b\b\b%s of 123',subnum(number))
% subnum is a 3-digit number in character form to preserve the 3-digit format declared elsewhere
end
But that is ugly and terribly inefficient. How do I rectify the problem?

Réponse acceptée

Walter Roberson
Walter Roberson le 10 Juil 2017
That is the most efficient way. There is no way to address individual characters or pixels of the command output window (unless perhaps you can get at it from the java level.)
  2 commentaires
dpb
dpb le 10 Juil 2017
And, \r is interpreted same as \n so that doesn't help, either.
But, might consider either a waitbar or just a msgbox
Kyle Poe
Kyle Poe le 10 Juil 2017
Ah. Oh well. Thank you anyway!

Connectez-vous pour commenter.

Plus de réponses (4)

Eeshan Bhatt
Eeshan Bhatt le 25 Oct 2018
Modifié(e) : Eeshan Bhatt le 25 Oct 2018
I know you have an accepted answer, but here's a quick robust code that I use often.
nbytes = fprintf('processing 0 of %d', length(z));
for nz = z
while nbytes > 0
fprintf('\b')
nbytes = nbytes - 1;
end
nbytes = fprintf('processing %d of %d', nz, length(z));
% YOUR PROCESS HERE
%
%
%
end
  1 commentaire
Ted Shultz
Ted Shultz le 19 Juil 2019
Modifié(e) : Ted Shultz le 19 Juil 2019
Eeshan, this is a nice solution! I would propose this small modification so that it runs a little faster, and is a little simpler:
nbytes = fprintf('processing 0 of %d', length(z));
for nz = z
fprintf(repmat('\b',1,nbytes))
nbytes = fprintf('processing %d of %d\n', nz, length(z));
% YOUR PROCESS HERE
%
%
%
end

Connectez-vous pour commenter.


Fangjun Jiang
Fangjun Jiang le 10 Juil 2017
or go fancy, waitbar()
  1 commentaire
Kyle Poe
Kyle Poe le 11 Juil 2017
This is what I ended up using, thank you!

Connectez-vous pour commenter.


Boubat Matthieu
Boubat Matthieu le 28 Juil 2020
I packaged the use of fprintf('\b') into a class hoping that it will ease the way to rewrite/update text in the command window. If you want to give it a try it's available here.
It goes like this:
prefix = 'processing subject ';
suffix = ' of 123';
progression = UpdatableText(prefix,suffix); % UpdatableText is the actual class
for i = 1:123
progression.print(num2str(i));
end
There are also methods to easily add a percent value and a progress bar.

Cristi Savlovschi
Cristi Savlovschi le 15 Juil 2021
function dispProgressMsg(msg)
ASCII_BKSP_CHAR = 8;
persistent prevMsgLen;
if isempty(prevMsgLen)
prevMsgLen = 0;
end
disp([ char(repmat(ASCII_BKSP_CHAR,1,prevMsgLen)) msg]);
prevMsgLen = numel(msg)+1;

Catégories

En savoir plus sur Dialog Boxes dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by