2009-09-07 6 views
5

मैं कंसोल स्क्रीन पर, डीओ-लूप के साथ की गई गणना की प्रगति को प्रदर्शित करना चाहता हूं। मैं इस तरह टर्मिनल के लिए प्रगति चर प्रिंट कर सकते हैं:कंसोल स्क्रीन पर वर्तमान लाइन को ओवरराइट करने के लिए मैं प्रिंटर या WRITE कथन कैसे प्रारूपित करूं?

PROGRAM TextOverWrite_WithLoop 
IMPLICIT NONE 
INTEGER :: Number, Maximum = 10 
DO Number = 1, MAXIMUM 
    WRITE(*, 100, ADVANCE='NO') REAL(Number)/REAL(Maximum)*100  
    100 FORMAT(TL10, F10.2) 
    ! Calcultations on Number  
END DO  
END PROGRAM TextOverWrite_WithLoop 

सांत्वना स्क्रीन पर ऊपर कोड के उत्पादन में है:

10,00 20,00 30,00 40,00 50,00 60,00 70,00 80,00 90,00 100,00

सभी एक ही पंक्ति पर, केवल कंसोल विंडो द्वारा लिपटे।

अग्रिम = 'नहीं' तर्क और TL10 (टैब इतने सारे रिक्त स्थान छोड़ दिया) संपादित वर्णनकर्ता अच्छी तरह से काम करता है एक ही लाइन पर पाठ अधिलेखित करने के लिए, उदाहरण के लिए निम्नलिखित कोड का उत्पादन:

WRITE(*, 100, ADVANCE='NO') 100, 500 
100 FORMAT(I3, 1X, TL4, I3) 

है:

बजाय

:

TL4 संपादित वर्णनकर्ता की वजह से।

इन दो उदाहरणों से कोई यह निष्कर्ष निकाल सकता है कि WRITE कथन किसी अन्य WRITE कथन द्वारा लिखे गए या उसी WRITE Satement (जैसा कि डीओ-लूप में) के पिछले निष्पादन द्वारा लिखा गया है उसे ओवरराइट नहीं कर सकता है।

क्या यह किसी भी तरह से दूर किया जा सकता है?

मैं विंडोज 7 आरसी 1 पर एफटीएन 95 कंपाइलर का उपयोग कर रहा हूं। (G95 संकलक bluescreens का सेटअप प्रोग्राम विंडोज 7 RC1, यहां तक ​​कि सोचा था कि यह Vista पर ठीक काम करता है।)

मैं, सवाल Supressing line breaks in Fortran 95 write statements के बारे में पता है, लेकिन यह मेरे लिए काम नहीं करता है क्योंकि उस प्रश्न का उत्तर नए ouput का मतलब उसी लाइन पर पिछले आउटपुट में जोड़ा जाता है; पिछले आउटपुट को ओवरराइट करने के नए आउटपुट की बजाय।

अग्रिम धन्यवाद।

+0

आप कौन सा कंपाइलर और ओएस चालू हैं? – DigitalRoss

+0

@ डिजीटल्रॉस, कंपाइलर = एफटीएन 95, ओएस = विंडोज 7 आरसी 1 – systemovich

+0

शायद आपको एक जवाब स्वीकार करना चाहिए? –

उत्तर

3

फोरट्रान मानकों के दायरे में इस प्रश्न का कोई समाधान नहीं है। हालांकि, अपने संकलक फोरट्रान तार में बैकस्लैश समझते हैं (यदि आप विकल्प -fbackslash का उपयोग जीएनयू फोरट्रान करता है), तो आप

write (*,"(A)",advance="no") "foo" 
    call sleep(1) 
    write (*,"(A)",advance="no") "\b\b\bbar" 
    call sleep(1) 
    write (*,"(A)",advance="no") "\b\b\bgee" 
    call sleep(1) 
    write (*,*) 
    end 

यह बैकस्लैश चरित्र (\b) है कि लाइन पर पहले से लिखे गए वर्णों को मिटाने के लिए उपयोग करता है लिख सकते हैं।

एनबी: यदि आपका कंपाइलर advance="no" नहीं समझता है, तो आप प्रारूप स्ट्रिंग में $ विनिर्देशक का उपयोग करने जैसे संबंधित गैर-मानक चाल का उपयोग कर सकते हैं।

8

कैरिज रिटर्न को एन्कोड करने के लिए निम्नलिखित ACHAR(13) के उपयोग से सिस्टम में पोर्टेबल होना चाहिए।

  character*1 creturn 
    ! CODE:: 
      creturn = achar(13) ! generate carriage return 
    ! other code ... 
      WRITE(* , 101 , ADVANCE='NO') creturn , i , npoint 
101  FORMAT(a , 'Point number : ',i7,' out of a total of ',i7) 
+0

आपको अपने कोड को हाइलाइट करने के लिए [कोड /] टैग (या इंडेंटिंग) का उपयोग करना चाहिए और इसे और अधिक पठनीय बनाना चाहिए। :) –

-1
OPEN(6,CARRIAGECONTROL ='FORTRAN') 
DO I=1,5 
WRITE(6,'(1H+" ",I)') I 
ENDDO 
+0

आम तौर पर, उत्तर अधिक उपयोगी होते हैं यदि उनमें कोड का क्या इरादा है, और यह दूसरों को पेश किए बिना समस्या का समाधान क्यों करता है। (इस पोस्ट को कम से कम एक उपयोगकर्ता द्वारा ध्वजांकित किया गया था, संभवतः क्योंकि उन्होंने सोचा था कि स्पष्टीकरण के बिना उत्तर हटा दिया जाना चाहिए या शायद "शायद" ने अपने हैकल्स उठाए हैं।) –

+0

यह एक स्पष्टीकरण के लायक है। नोट 'CARRIAGECONTROL =' मानक अनुरूप नहीं है और इकाई को दोबारा खोलना नहीं है (मान लीजिए कि यह output_unit है) विशेष रूप से गैर-मानक विनिर्देशकों के साथ मुश्किल हो सकता है। इसके अलावा, आधुनिक फोरट्रान से होलेरिथ हटा दिए गए हैं। आपको '1 एच + "' 'के अर्थ की व्याख्या करनी चाहिए। इसके अलावा, मानक फोरट्रान में आपको 'I0' का उपयोग करना होगा, केवल 'I' की अनुमति नहीं है। –

0

निम्नलिखित पूरी तरह से G95 fortran का उपयोग कर काम:

 NF = NF + 1 
     IF(MOD(NF,5).EQ.0) WRITE(6,42,ADVANCE='NO') NF, ' PDFs'//CHAR(13) 
    42 FORMAT(I6,A) 

दिया: 5 पीडीएफ़

एक ही लाइन पर # 1 स्थान पर कर्सर छोड़कर। अगले अपडेट पर, 5 एक 10 में बदल गया। ASCII 13 (दशमलव) एक कैरिज रिटर्न है।

संबंधित मुद्दे