2012-04-21 11 views
5

का उपयोग कर इनपुट फ़ाइल में सही ढंग से टिप्पणी पंक्तियां पढ़ना यह मेरी समझ है कि फ़ाइल से डेटा पढ़ने पर फोरट्रान, लाइनों को छोड़कर और तारांकन (*) को छोड़कर यह मान लेगा कि वे एक टिप्पणी हैं। खैर, मुझे इस व्यवहार को एक बहुत ही सरल कार्यक्रम के साथ प्राप्त करने में समस्या हो रही है।फोरट्रान 90

1  program test 
    2 
    3  integer dat1 
    4 
    5  open(unit=1,file="file.inp") 
    6 
    7  read(1,*) dat1 
    8 
    9 
10  end program test 

यह "file.inp" है: यह मेरा सरल फोरट्रान कार्यक्रम है

1 *Hello 
    2 1 

मैं

gfortran -g -o test test.f90 

जब मैं चलाने के साथ अपने साधारण प्रोग्राम बनाया है, मैं त्रुटि मिलती है :

At line 7 of file test.f90 (unit = 1, file = 'file.inp') 
Fortran runtime error: Bad integer for item 1 in list input 

जब मैं इनपुट फ़ाइल चलाता हूं wi वें टिप्पणी लाइन हटा दी गई, i.e .:

1 1 

कोड ठीक चलाता है। तो ऐसा लगता है कि फोरट्रान सही ढंग से उस टिप्पणी रेखा को समझने में एक समस्या है। यह कुछ बेहद सरल होना चाहिए जो मैं यहां लापता हूं, लेकिन मैं Google पर कुछ भी नहीं बदल सकता।

उत्तर

7

फोरट्रान स्वचालित रूप से इनपुट फ़ाइलों में टिप्पणियां लाइन नहीं छोड़ता है। आप स्ट्रिंग में लाइन को पहले पढ़ने, अपने टिप्पणी प्रतीक के लिए पहले अक्षर की जांच करके या उस प्रतीक के लिए स्ट्रिंग को खोजकर आसानी से पर्याप्त कर सकते हैं, फिर यदि रेखा कोई टिप्पणी नहीं है, तो स्ट्रिंग के "आंतरिक पढ़ने" संख्यात्मक मूल्य प्राप्त करें।

कुछ की तरह:

use, intrinsic :: iso_fortran_env 

character (len=200) :: line 
integer :: dat1, RetCode 

read_loop: do 
    read (1, '(A)', isostat=RetCode) line 
    if (RetCode == iostat_end) exit ReadLoop 
    if (RetCode /= 0) then 
     ... read error 
     exit ReadLoop 
    end if 
    if (index (line, "*") /= 0) cycle read_loop 
    read (line, *) dat1 
end do read_loop 
+0

हां, मैंने अभी यह अनुमान लगाया है कि वास्तव में, और मेरे समाधान को पोस्ट करने के लिए वापस आ रहा था। हालांकि, आपके कोड के समाधान के मुकाबले थोड़ा सा स्मार्ट है (मैं अपने पढ़ने के कथन के लिए "end =" विकल्प का उपयोग कर रहा था)। एक बात जिसे मैं समझ नहीं पा रहा हूं, हालांकि, "iso_fortran_env" के उपयोग की आवश्यकता क्या है? क्षमा करें, मैंने कुछ बड़े फोरट्रान कार्यक्रम लिखे हैं और उन्हें काम कर रहे हैं, लेकिन जब आंतरिक आंतरिक मॉड्यूल की बात आती है और वे टेबल पर क्या आते हैं तो मैं थोड़ी देर का हूं। – rks171

+2

अन्य चीजों के अलावा, iso_fortran_env यह मानने के लिए "isostat_end" मान प्रदान करता है कि गैर-शून्य रिटर्न कोड अंत-फ़ाइल है या नहीं। यह "end = LineNumber" के साथ, कथन लेबल के बजाय "बाहर निकलने" निर्माण के उपयोग की अनुमति देता है। –

0

फोरट्रान जब तक आप namelists उपयोग कर रहे हैं, डिफ़ॉल्ट रूप से कुछ भी उपेक्षा नहीं करता है और उस मामले में टिप्पणी एक विस्मयादिबोधक चिह्न के साथ शुरू करते हैं।

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