Fortran - ไฟล์อินพุตเอาต์พุต

Fortran ช่วยให้คุณอ่านข้อมูลและเขียนข้อมูลลงในไฟล์

ในบทสุดท้ายคุณได้เห็นวิธีการอ่านข้อมูลและเขียนข้อมูลไปยังเทอร์มินัล ในบทนี้คุณจะศึกษาฟังก์ชันอินพุตและเอาต์พุตไฟล์ที่จัดทำโดย Fortran

คุณสามารถอ่านและเขียนลงในไฟล์ตั้งแต่หนึ่งไฟล์ขึ้นไป คำสั่งเปิดเขียนอ่านและปิดช่วยให้คุณบรรลุเป้าหมายนี้

การเปิดและปิดไฟล์

ก่อนใช้ไฟล์คุณต้องเปิดไฟล์ openคำสั่งใช้เพื่อเปิดไฟล์สำหรับอ่านหรือเขียน รูปแบบคำสั่งที่ง่ายที่สุดคือ -

open (unit = number, file = "name").

อย่างไรก็ตามคำสั่งเปิดอาจมีรูปแบบทั่วไป -

open (list-of-specifiers)

ตารางต่อไปนี้อธิบายตัวระบุที่ใช้บ่อยที่สุด -

ซีเนียร์ No ตัวระบุและคำอธิบาย
1

[UNIT=] u

หมายเลขหน่วย u อาจเป็นตัวเลขใดก็ได้ในช่วง 9-99 และระบุไฟล์คุณสามารถเลือกหมายเลขใดก็ได้ แต่ทุกไฟล์ที่เปิดอยู่ในโปรแกรมจะต้องมีหมายเลขเฉพาะ

2

IOSTAT= ios

เป็นตัวระบุสถานะ I / O และควรเป็นตัวแปรจำนวนเต็ม หากคำสั่งเปิดสำเร็จค่า ios ที่ส่งคืนจะเป็นศูนย์อื่นเป็นค่าที่ไม่ใช่ศูนย์

3

ERR = err

เป็นป้ายกำกับที่คอนโทรลกระโดดในกรณีที่เกิดข้อผิดพลาดใด ๆ

4

FILE = fname

ชื่อไฟล์สตริงอักขระ

5

STATUS = sta

จะแสดงสถานะก่อนหน้าของไฟล์ สตริงอักขระและสามารถมีค่าหนึ่งในสามค่า NEW, OLD หรือ SCRATCH ไฟล์เริ่มต้นถูกสร้างและลบเมื่อปิดหรือโปรแกรมสิ้นสุดลง

6

ACCESS = acc

เป็นโหมดการเข้าถึงไฟล์ สามารถมีได้สองค่า SEQUENTIAL หรือ DIRECT ค่าเริ่มต้นคือ SEQUENTIAL

7

FORM = frm

จะให้สถานะการจัดรูปแบบของไฟล์ สามารถมีได้ทั้งสองค่าที่จัดรูปแบบหรือไม่ถูกต้อง ค่าเริ่มต้นคือ UNFORMATTED

8

RECL = rl

ระบุความยาวของแต่ละระเบียนในไฟล์การเข้าถึงโดยตรง

หลังจากเปิดไฟล์แล้วไฟล์จะถูกเข้าถึงโดยคำสั่งอ่านและเขียน เมื่อเสร็จแล้วควรปิดโดยใช้ไฟล์close คำให้การ.

คำสั่งปิดมีไวยากรณ์ต่อไปนี้ -

close ([UNIT = ]u[,IOSTAT = ios,ERR = err,STATUS = sta])

โปรดทราบว่าพารามิเตอร์ในวงเล็บเป็นทางเลือก

Example

ตัวอย่างนี้สาธิตการเปิดไฟล์ใหม่สำหรับการเขียนข้อมูลบางส่วนลงในไฟล์

program outputdata   
implicit none

   real, dimension(100) :: x, y  
   real, dimension(100) :: p, q
   integer :: i  
   
   ! data  
   do i=1,100  
      x(i) = i * 0.1 
      y(i) = sin(x(i)) * (1-cos(x(i)/3.0))  
   end do  
   
   ! output data into a file 
   open(1, file = 'data1.dat', status = 'new')  
   do i=1,100  
      write(1,*) x(i), y(i)   
   end do  
   
   close(1) 
   
end program outputdata

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะสร้างไฟล์ data1.dat และเขียนค่าอาร์เรย์ x และ y ลงไป จากนั้นปิดไฟล์

การอ่านและเขียนลงในไฟล์

คำสั่ง read และ write ตามลำดับใช้สำหรับการอ่านและเขียนลงในไฟล์ตามลำดับ

พวกเขามีไวยากรณ์ต่อไปนี้ -

read ([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)
write([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)

ตัวระบุส่วนใหญ่ได้รับการกล่าวถึงแล้วในตารางด้านบน

ตัวระบุ END = s คือป้ายคำสั่งที่โปรแกรมจะกระโดดเมื่อถึงจุดสิ้นสุดของไฟล์

Example

ตัวอย่างนี้สาธิตการอ่านและเขียนลงในไฟล์

ในโปรแกรมนี้เราอ่านจากไฟล์เราสร้างในตัวอย่างสุดท้าย data1.dat และแสดงบนหน้าจอ

program outputdata   
implicit none   

   real, dimension(100) :: x, y  
   real, dimension(100) :: p, q
   integer :: i  
   
   ! data  
   do i = 1,100  
      x(i) = i * 0.1 
      y(i) = sin(x(i)) * (1-cos(x(i)/3.0))  
   end do  
   
   ! output data into a file 
   open(1, file = 'data1.dat', status='new')  
   do i = 1,100  
      write(1,*) x(i), y(i)   
   end do  
   close(1) 

   ! opening the file for reading
   open (2, file = 'data1.dat', status = 'old')

   do i = 1,100  
      read(2,*) p(i), q(i)
   end do 
   
   close(2)
   
   do i = 1,100  
      write(*,*) p(i), q(i)
   end do 
   
end program outputdata

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

0.100000001  5.54589933E-05
0.200000003  4.41325130E-04
0.300000012  1.47636665E-03
0.400000006  3.45637114E-03
0.500000000  6.64328877E-03
0.600000024  1.12552457E-02
0.699999988  1.74576249E-02
0.800000012  2.53552198E-02
0.900000036  3.49861123E-02
1.00000000   4.63171229E-02
1.10000002   5.92407547E-02
1.20000005   7.35742599E-02
1.30000007   8.90605897E-02
1.39999998   0.105371222    
1.50000000   0.122110792    
1.60000002   0.138823599    
1.70000005   0.155002072    
1.80000007   0.170096487    
1.89999998   0.183526158    
2.00000000   0.194692180    
2.10000014   0.202990443    
2.20000005   0.207826138    
2.29999995   0.208628103    
2.40000010   0.204863414    
2.50000000   0.196052119    
2.60000014   0.181780845    
2.70000005   0.161716297    
2.79999995   0.135617107    
2.90000010   0.103344671    
3.00000000   6.48725405E-02
3.10000014   2.02930309E-02
3.20000005  -3.01767997E-02
3.29999995  -8.61928314E-02
3.40000010  -0.147283033    
3.50000000  -0.212848678    
3.60000014  -0.282169819    
3.70000005  -0.354410470    
3.79999995  -0.428629100    
3.90000010  -0.503789663    
4.00000000  -0.578774154    
4.09999990  -0.652400017    
4.20000029  -0.723436713    
4.30000019  -0.790623367    
4.40000010  -0.852691114    
4.50000000  -0.908382416    
4.59999990  -0.956472993    
4.70000029  -0.995793998    
4.80000019  -1.02525222    
4.90000010  -1.04385209    
5.00000000  -1.05071592    
5.09999990  -1.04510069    
5.20000029  -1.02641726    
5.30000019  -0.994243503    
5.40000010  -0.948338211    
5.50000000  -0.888650239    
5.59999990  -0.815326691    
5.70000029  -0.728716135    
5.80000019  -0.629372001    
5.90000010  -0.518047631    
6.00000000  -0.395693362    
6.09999990  -0.263447165    
6.20000029  -0.122622721    
6.30000019   2.53026206E-02
6.40000010   0.178709000    
6.50000000   0.335851669    
6.59999990   0.494883657    
6.70000029   0.653881252    
6.80000019   0.810866773    
6.90000010   0.963840425    
7.00000000   1.11080539    
7.09999990   1.24979746    
7.20000029   1.37891412    
7.30000019   1.49633956    
7.40000010   1.60037732    
7.50000000   1.68947268    
7.59999990   1.76223695    
7.70000029   1.81747139    
7.80000019   1.85418403    
7.90000010   1.87160957    
8.00000000   1.86922085    
8.10000038   1.84674001    
8.19999981   1.80414569    
8.30000019   1.74167395    
8.40000057   1.65982044    
8.50000000   1.55933595    
8.60000038   1.44121361    
8.69999981   1.30668485    
8.80000019   1.15719533    
8.90000057   0.994394958    
9.00000000   0.820112705    
9.10000038   0.636327863    
9.19999981   0.445154816    
9.30000019   0.248800844    
9.40000057   4.95488606E-02
9.50000000  -0.150278628    
9.60000038  -0.348357052    
9.69999981  -0.542378068    
9.80000019  -0.730095863    
9.90000057  -0.909344316    
10.0000000  -1.07807255