Fortran - Đầu ra đầu vào tệp

Fortran cho phép bạn đọc dữ liệu và ghi dữ liệu vào tệp.

Trong chương trước, bạn đã biết cách đọc dữ liệu từ và ghi dữ liệu vào thiết bị đầu cuối. Trong chương này, bạn sẽ nghiên cứu các chức năng nhập và xuất tệp do Fortran cung cấp.

Bạn có thể đọc và ghi vào một hoặc nhiều tệp. Các câu lệnh OPEN, WRITE, READ và CLOSE cho phép bạn đạt được điều này.

Mở và đóng tệp

Trước khi sử dụng tệp, bạn phải mở tệp. Cácopenlệnh được sử dụng để mở tệp để đọc hoặc ghi. Dạng đơn giản nhất của lệnh là:

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

Tuy nhiên, tuyên bố mở có thể có dạng chung:

open (list-of-specifiers)

Bảng sau đây mô tả các từ chỉ định được sử dụng phổ biến nhất:

Sr.No Chỉ định & Mô tả
1

[UNIT=] u

Số đơn vị u có thể là bất kỳ số nào trong phạm vi 9-99 và nó cho biết tệp, bạn có thể chọn bất kỳ số nào nhưng mọi tệp đang mở trong chương trình phải có một số duy nhất

2

IOSTAT= ios

Nó là định danh trạng thái I / O và phải là một biến số nguyên. Nếu câu lệnh mở thành công thì giá trị ios được trả về bằng 0 còn giá trị khác không.

3

ERR = err

Nó là một nhãn mà điều khiển sẽ nhảy vào trong trường hợp có bất kỳ lỗi nào.

4

FILE = fname

Tên tệp, một chuỗi ký tự.

5

STATUS = sta

Nó hiển thị trạng thái trước của tệp. Một chuỗi ký tự và có thể có một trong ba giá trị MỚI, CŨ hoặc KHẮC PHỤC. Tập tin đầu được tạo và xóa khi đóng hoặc chương trình kết thúc.

6

ACCESS = acc

Đây là chế độ truy cập tệp. Có thể có một trong hai giá trị, SEQUENTIAL hoặc DIRECT. Mặc định là SEQUENTIAL.

7

FORM = frm

Nó cung cấp trạng thái định dạng của tệp. Có thể có một trong hai giá trị FORMATTED hoặc UNFORMATTED. Mặc định là UNFORMATTED

số 8

RECL = rl

Nó chỉ định độ dài của mỗi bản ghi trong tệp truy cập trực tiếp.

Sau khi tệp đã được mở, nó được truy cập bằng các câu lệnh đọc và ghi. Sau khi hoàn tất, nó sẽ được đóng lại bằng cách sử dụngclose tuyên bố.

Câu lệnh close có cú pháp sau:

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

Xin lưu ý rằng các tham số trong ngoặc là tùy chọn.

Example

Ví dụ này minh họa việc mở một tệp mới để ghi một số dữ liệu vào tệp.

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

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ tạo ra tệp data1.dat và ghi các giá trị mảng x và y vào đó. Và sau đó đóng tệp.

Đọc từ và ghi vào tệp

Các câu lệnh đọc và ghi tương ứng được sử dụng để đọc từ và ghi vào một tệp tương ứng.

Chúng có cú pháp sau:

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

Hầu hết các thông số kỹ thuật đã được thảo luận trong bảng trên.

Bộ xác định END = s là một nhãn câu lệnh mà chương trình sẽ nhảy khi đến cuối tệp.

Example

Ví dụ này minh họa việc đọc và ghi vào một tệp.

Trong chương trình này, chúng tôi đọc từ tệp, chúng tôi đã tạo trong ví dụ cuối cùng, data1.dat, và hiển thị nó trên màn hình.

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

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

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