2011-05-10 2 views
12

में वर्तमान आउटपुट को ओवरराइट करें मैं आर फ़ंक्शन txtProgressBar() के साथ खेल रहा हूं। कंसोल में वर्तमान आउटपुट को ओवरराइट करने के लिए फ़ंक्शन की क्षमता को मैं हाइजैक कैसे कर सकता हूं?आर कंसोल

इस तरह प्रगति बार अपडेट अर्थात्:

> some R function 
============ 

> some R function 
======================== 

नहीं

> some R function 
============ 
======================== 

उदाहरण के लिए हो जाता है, मैं कैसे समारोह है कि में वर्तमान समय प्रदर्शित करेगा लिख ​​सकता हूं कंसोल:

> some R function 
13:01 

हो जाता है

> some R function 
13:02 

नहीं

> some R function 
13:01 
13:01 
13:01 
13:01 
13:02 
13:02 
13:02 
13:02 
+0

उत्तर मेरे ब्लॉग पर आगे चर्चा की गई। लापरवाह स्व-प्रोमो: http://4dpiecharts.com/2011/05/11/a-clock-utility-via-console-hackery/ –

उत्तर

12

इस कार्यक्रम के काम करने के लिए लगता है?

/संपादन: और भी बेहतर (धन्यवाद @Greg बर्फ):

while (1) { 
cat('\r',format(Sys.time(),'%H:%M:%S')) 
flush.console() 
} 
+0

\ b बैकस्लैश कैरेक्टर उन प्रोग्रामों के साथ समस्याएं पैदा कर सकता है जो कंसोल आउटपुट (जैसे टेक्स्टमैट और सब्लिमेटेक्स्ट) को कैप्चर करते हैं। क्या होता है कि आउटपुट इस तरह दिखता है: (0 परीक्षण) \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ बी (1 टेस्ट) \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b ...(99 परीक्षण) \ b \ b \ b \ b \ b \ b \ b \ b \ b कोई समाधान मुझे एटीएम नहीं मिला है, अगर आप दूसरों के उपयोग के लिए अपना काम जारी करने की योजना बना रहे हैं तो बस कुछ ध्यान रखें – Brandon

+0

@ ब्रैंडन \ r के बारे में क्या? – Zach

+0

@Zach मुझे नहीं पता, मैंने केवल \ b मुद्दा देखा जब यह किसी चीज के साथ समस्या बन गई – Brandon

1

मैं अधिलेखित नहीं लगता कि कंसोल पर संभव है। कोई बैकस्पेस एस्केप अनुक्रम नहीं है। प्रोग्रेस बार खींचा जा सकता है क्योंकि बिल्ली फ़ंक्शन cr को तब तक नहीं छोड़ेगा जब तक ऐसा करने के लिए कहा न जाए।

संपादित करें: मैं गलत था। बैकस्पेस चरित्र मान्यता प्राप्त है:

while (1) { 
cat('\b\b\b\b\b\b',format(Sys.time(),'%H:%M')) 
flush.console() 
} 

वहाँ कोई कारण यह एक बुरा विचार हो सकता है कर रहे हैं:

for (i in 1:1000) { 
    cat(as.character(Sys.time())) 
    flush.console() 
    for(i in 1:19) {cat("\8")} } 
+0

गोटो। तो मैं '13: 01' प्रिंट कर सकता हूं और इसे 13:01 13: 02' पर अपडेट कर सकता हूं लेकिन' 13: 02' नहीं? – Zach

4

सुनिश्चित करें कि आप कर सकते हैं:

while(1) { 
    cat("\b\b\b\b\b\b\b\b",format(Sys.time(), "%H:%M:%S"),sep="") 
} 
13
के बजाय "\ b \ b \ b \ ख"

तुम सिर्फ उपयोग कर सकते हैं लाइन की शुरुआत में जाने के लिए "\ r" और लाइन पर सबकुछ ओवरराइट करें (सुनिश्चित करें कि बिल्ली का उपयोग अभी भी करें और लाइन फीड में न डालें)।

हालांकि यदि आप प्रगति प्रदर्शित करना चाहते हैं तो यह WinProgressBar (केवल विंडोज़) या tkProgressBar (tcltk पैकेज, सभी प्लेटफ़ॉर्म) का उपयोग करना बेहतर हो सकता है जिसे प्रगति पट्टी के अतिरिक्त लेबल के साथ अपडेट किया जा सकता है।

विंडोज़ पर आप उस प्रकार की जानकारी को बड़ी विंडो के ऊपर या नीचे में रखने के लिए setWindowTitle या setStatusBar फ़ंक्शंस का भी उपयोग कर सकते हैं।