Matlab

2012-06-15 13 views
7

में टेक्स्ट प्रगति पट्टी मुझे एक मैटलैब फ़ंक्शन मिला है जिसमें चलाने के लिए कुछ समय लगता है, और मैं उपयोगकर्ता को यह दिखाना चाहता हूं कि प्रगति हो रही है। बसप्रगति में प्रत्येक 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 

आप इस कोड को कमांड लाइन (उदाहरण के लिए) दिखा रहा है embedd हैं: एक नई पंक्ति हर यात्रा में प्रवेश के बिना: "27.8 प्रतिशत किया"!

+0

यह स्वीकार्य समाधान होना चाहिए। – theV0ID

+0

तो यह चाल है कि '' \ b'', यानी, ASCII 0x08, बैकस्पेस है। –

+0

नोट: यह ऑक्टेव पर काम नहीं करता है, जहां मानक आउटपुट buffered है। –

0

मूल रूप से @Ergodicity द्वारा लिखित क्या है, केवल ऑक्टेट के लिए यदि आप मानक आउटपुट को buffered (जो डिफ़ॉल्ट बीटीडब्लू है) सेट करते हैं, तो आपको इसे पृष्ठ_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