2010-05-05 14 views
6

से शुरू करने के लिए वापस प्रिंट करें ठीक है, तो मैं जो करने की कोशिश कर रहा हूं वह मेरी कमांड लाइन पर पूरा प्रतिशत प्रिंट कर रहा है, अब मैं स्क्रीन पर दिखाए गए नंबर को 'अपडेट' करना चाहता हूं। तो किसी भी तरह लाइन की शुरुआत में वापस जाएं और इसे बदलें।पर्ल: लाइन

उदाहरण के लिए windows relog.exe कमांड-लाइन उपयोगिता (जो एक .blg फ़ाइल को .csv फ़ाइल में परिवर्तित कर सकती है) यह करता है। यदि आप इसे चलाते हैं, तो यह एक प्रतिशत पूर्ण प्रदर्शित करेगा।

अब यह शायद सी ++ में लिखा गया है। मुझे नहीं पता कि यह पर्ल में भी संभव है या नहीं?

उत्तर

13

उपयोग "\ r" या "\ 015" अष्टाधारी (उर्फ "कैरट लौटें" उर्फ ​​"Carriage Return" चरित्र टाइपराइटर दिनों से होने वाले

> perl5.8 -e 'print "11111\r222\r3\n";' 
32211 
> perl5.8 -e 'print "11111\015222\0153\n";' 
32211 

बस भूल नहीं है :) पर मुद्रित करने के लिए कम से कम वर्णों के रूप में बहुत से वर्णों को पहले से ही किसी पुराने वर्ण को ओवरराइट करने के लिए मुद्रित किया गया है (जैसा कि आप ऊपर उदाहरण में देख सकते हैं, ऐसा करने में विफलता पुराने वर्ण रखेगी)।

माइकल के रूप में जागरूक होने की एक अन्य बात यह है कि इन प्रिंटिंग होने पर ऑटोफ्लश चालू होना आवश्यक है, ताकि आउटपुट प्रसंस्करण के बहुत अंत में न्यूलाइन चरित्र की प्रतीक्षा न करे।

अद्यतन: कृपया ध्यान दें कि 013 अष्टाधारी चरित्र एक और जवाब में सिफारिश की वास्तव में एक कार्यक्षेत्र टैब है:

> perl5.8 -e 'print "11111\013222\0133\n";'  
11111 
    222 
     3 
+0

विशेष वर्णों की पूरी सूची के लिए आप प्रिंट कर सकते हैं, http://en.wikipedia.org/wiki/ASCII – DVK

+5

देखें, आपको ऑटोफ्लशिंग ('$ | = 1') चालू करने की भी आवश्यकता है क्योंकि डिफ़ॉल्ट आउटपुट को तब तक buffered किया जाता है जब तक नई लाइन देखी गई है। (या बफर भरने तक, लेकिन यह प्रगति मीटर के लिए नहीं होगा।) –

+0

@ माइकल - मेरे मूल उत्तर में ऑटोफ्लशिंग शामिल था, मैंने इसे लाइन की लंबाई को कम रखने के लिए हटा दिया क्योंकि यह सख्ती से मांस से संबंधित नहीं था प्रश्न ... एक नोट – DVK

0

सी और सी ++ में, चाल चार # 13 प्रिंट करना है। शायद यह पर्ल में काम कर सकते हैं।

for (int pc = 0 ; pc <= 100 ; ++pc) 
    printf("Percentage: %02d %% %c", pc, 13); 
printf("\n"); 
+0

अपरीक्षित कोड के लिए downvote। – daxim

8

आप क्या करना चाहते हैं क्या के आधार पर, pv आपकी समस्या का समाधान हो सकता है। यह किसी भी स्क्रिप्ट को लपेट सकता है जो फ़ाइल को इनपुट के रूप में लेता है, और एक प्रगति पट्टी जोड़ता है।

उदाहरण

pv data.gz | gunzip -c | ./complicated-perl-script-that-reads-stdin 

pv लिए RedHat/CentOS और Ubuntu कम से कम के लिए पैक किया जाता है। अधिक जानकारी: http://www.ivarch.com/programs/pv.shtml

अन्यथा मैं सीपीएएन का उपयोग करूंगा, उदा। Term::ProgressBar

+2

+1 :: बार, नौकरी के लिए सबसे अच्छा समाधान। – Ether

+0

@rjh - मुझे लगता है कि वह विंडोज पर है, इसलिए उसे सीपीएएन मॉड्यूल के लिए एक डॉस/विंडोज पीवी पोर्ट – DVK

+0

+1 की आवश्यकता हो सकती है - मुझे यकीन नहीं है कि यह ओपी के लिए कितना उपयोगी है लेकिन यह जानना बहुत ही शैक्षिक है – DVK

1

तुम भी \ ख का उपयोग वापस एक चरित्र को स्थानांतरित करने के कर सकते हैं:

 
local $| = 1; #flush immediately 
print "Doing it - 10%"; 
sleep(1); 
print "\b\b\b"; 
print "20%"; 
print "\n", "Done", "\n";