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