खोज…


वाक्य - विन्यास

  • WRITE(unit num, format num) एक नई पंक्ति में कोष्ठक के बाद डेटा को आउटपुट करता है।
  • ब्रैकेट के बाद चर के लिए READ(unit num, format num) इनपुट।
  • OPEN(unit num, FILE=file) एक फ़ाइल खोलता है। (फाइलें खोलने के और भी विकल्प हैं, लेकिन वे I / O के लिए महत्वपूर्ण नहीं हैं।
  • CLOSE(unit num) एक फ़ाइल को बंद करता है।

सिंपल आई / ओ

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

नीचे निर्दिष्ट के रूप में, read कमांड दो तर्क लेता है: इकाई संख्या और प्रारूप निर्दिष्ट करता है। नीचे दिए गए उदाहरण में, हम इकाई संख्या के लिए * उपयोग करते हैं (जो स्टडिन को इंगित करता है) और * प्रारूप के लिए (जो इस मामले में वास्तविक के लिए डिफ़ॉल्ट को इंगित करता है)। हम print स्टेटमेंट के प्रारूप को भी निर्दिष्ट करते हैं। एक वैकल्पिक रूप से write(*,"The value....") उपयोग कर सकते हैं write(*,"The value....") या बस स्वरूपण को अनदेखा करें और इसे इस रूप में देखें

print *,"The entered value was ", x," and its square is ",x*x

जिसके परिणामस्वरूप संभवत: कुछ अजीब तरह से तार और मूल्यों में परिणाम होगा।

program SimpleIO
   implicit none
   integer, parameter :: wp = selected_real_kind(15,307)
   real(kind=wp) :: x
   
   ! we'll loop over until user enters a negative number
   print '("Enter a number >= 0 to see its square. Enter a number < 0 to exit.")'
   do
      ! this reads the input as a double-pricision value
      read(*,*) x
      if (x < 0d0) exit
      ! print the entered value and it's square
      print '("The entered value was ",f12.6,", its square is ",f12.6,".")',x,x*x
   end do
   print '("Thank you!")'
   
end program SimpleIO

कुछ त्रुटि जाँच के साथ पढ़ें

एक आधुनिक फोरट्रान उदाहरण जिसमें त्रुटि जाँच और फ़ाइल के लिए एक नई इकाई संख्या प्राप्त करने के लिए एक फ़ंक्शन शामिल है।

module functions

contains

    function get_new_fileunit() result (f)
        implicit none

        logical    :: op
        integer    :: f

        f = 1
        do 
            inquire(f,opened=op)
            if (op .eqv. .false.) exit
            f = f + 1
        enddo

    end function

end module

program file_read
    use functions, only : get_new_fileunit
    implicit none

    integer            :: unitno, ierr, readerr
    logical            :: exists
    real(kind(0.d0))   :: somevalue
    character(len=128) :: filename

    filename = "somefile.txt"

    inquire(file=trim(filename), exist=exists)
    if (exists) then
        unitno = get_new_fileunit()
        open(unitno, file=trim(filename), action="read", iostat=ierr)
        if (ierr .eq. 0) then
            read(unitno, *, iostat=readerr) somevalue
            if (readerr .eq. 0) then
                print*, "Value in file ", trim(filename), " is ", somevalue
            else
                print*, "Error ", readerr, & 
                        " attempting to read file ", & 
                        trim(filename)
            endif
        else
            print*, "Error ", ierr ," attempting to open file ", trim(filename)
            stop
        endif
    else
        print*, "Error -- cannot find file: ", trim(filename)
        stop
    endif

end program file_read

कमांड लाइन तर्क पारित करना

जहां कमांड लाइन के तर्क समर्थित हैं, उन्हें get_command_argument आंतरिक (फोरट्रान 2003 मानक में पेश) के माध्यम से पढ़ा जा सकता है। कमांड लाइन पर दिए गए तर्कों की संख्या जानने के लिए command_argument_count आंतरिक शामिल है।

सभी कमांड-लाइन तर्क तार के रूप में पढ़े जाते हैं, इसलिए संख्यात्मक डेटा के लिए एक आंतरिक प्रकार रूपांतरण किया जाना चाहिए। एक उदाहरण के रूप में, यह सरल कोड कमांड लाइन पर दिए गए दो नंबरों को बताता है:

PROGRAM cmdlnsum
IMPLICIT NONE
CHARACTER(100) :: num1char
CHARACTER(100) :: num2char
REAL :: num1
REAL :: num2
REAL :: numsum

!First, make sure the right number of inputs have been provided
IF(COMMAND_ARGUMENT_COUNT().NE.2)THEN
  WRITE(*,*)'ERROR, TWO COMMAND-LINE ARGUMENTS REQUIRED, STOPPING'
  STOP
ENDIF

CALL GET_COMMAND_ARGUMENT(1,num1char)   !first, read in the two values
CALL GET_COMMAND_ARGUMENT(2,num2char)

READ(num1char,*)num1                    !then, convert them to REALs
READ(num2char,*)num2

numsum=num1+num2                        !sum numbers
WRITE(*,*)numsum                        !write out value

END PROGRAM

get_command_argument में संख्या तर्क उपयोगी रूप से 0 और command_argument_count के परिणाम के command_argument_count । यदि मान 0 तो कमांड नाम की आपूर्ति की जाती है (यदि समर्थित है)।

कई संकलक कमांड लाइन के तर्कों को एक्सेस करने के लिए गैर-मानक इंट्रिंसिक्स (जैसे getarg ) भी प्रदान करते हैं। चूंकि ये गैर-मानक हैं, इसलिए संगत संकलक प्रलेखन से परामर्श किया जाना चाहिए।


get_command_argument उपयोग उपरोक्त उदाहरण से परे length और status तर्क के साथ बढ़ाया जा सकता है। उदाहरण के लिए, साथ

character(5) arg
integer stat
call get_command_argument(number=1, value=arg, status=stat)

का मूल्य stat होगा -1 यदि पहला तर्क मौजूद है और 5. से लंबाई अधिक से अधिक है, तो कुछ अन्य कठिनाई तर्क को पुन: प्राप्त है का मूल्य stat कुछ सकारात्मक संख्या होगी (और arg कारतूस की पूरी तरह से शामिल होंगे)। अन्यथा इसका मूल्य 0 होगा।

length तर्क को आस्थगित लंबाई वर्ण चर के साथ जोड़ा जा सकता है, जैसे कि निम्न उदाहरण में।

character(:), allocatable :: arg
integer arglen, stat
call get_command_argument(number=1, length=arglen)  ! Assume for simplicity success
allocate (character(arglen) :: arg)
call get_command_argument(number=1, value=arg, status=stat)


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow