2012-06-15 3 views
7

У меня есть функция Matlab, для выполнения которой требуется некоторое время, и я хотел бы показать пользователю, что прогресс выполняется. Просто disp Прогресс, каждые 5% или около того, слишком сильно загромождает экран, так как предыдущий текст не будет удален.Строка выполнения текста в Matlab

Как решить эту проблему? В командном окне есть другая важная информация, поэтому очистка ее не может быть и речи.

ответ

8

Вы можете использовать waitbar функцию для этого. См. MATLAB Documentation on waitbar.

+0

Я искал текстовую версию, но это было только потому, что я не знаю, насколько полезно 'waitbar' было. Благодаря! – Andreas

12

Отображение прогессии в окне команд также возможно (и, возможно, проще). Я нашел очень простое, быстрое решение для реализации на 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 

Если этот код возможность размещения командной строки с указанием (например): «Процент сделано: 27,8» без ввода новой строки каждой итерации!

+0

Это должно быть принятое решение. – theV0ID

+0

Итак, трюк заключается в том, что '' \ b'', т. Е. ASCII 0x08, является обратным пространством. –

+0

Примечание: это не работает на Octave, где стандартный вывод буферизуется. –

0

В основном то, что написано с помощью @Ergodicity, является правильным, только для Octave, если вы устанавливаете стандартный вывод для буферизации (который по умолчанию используется по умолчанию), вам нужно было включить его через page_output_immediately (1); вижу эту страницу для более octave doc: Terminal output

очень кратких изменений по предлагаемому коду:

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 
Смежные вопросы