Fortran-파일 입력 출력
Fortran을 사용하면 파일에서 데이터를 읽고 데이터를 파일에 쓸 수 있습니다.
지난 장에서 터미널에서 데이터를 읽고 쓰는 방법을 살펴 보았습니다. 이 장에서는 Fortran에서 제공하는 파일 입력 및 출력 기능을 연구합니다.
하나 이상의 파일을 읽고 쓸 수 있습니다. OPEN, WRITE, READ 및 CLOSE 문을 사용하여이를 수행 할 수 있습니다.
파일 열기 및 닫기
파일을 사용하기 전에 파일을 열어야합니다. 그만큼open명령은 읽기 또는 쓰기를 위해 파일을 여는 데 사용됩니다. 가장 간단한 명령 형식은 다음과 같습니다.
open (unit = number, file = "name").
그러나 공개 진술은 일반적인 형식을 가질 수 있습니다.
open (list-of-specifiers)
다음 표는 가장 일반적으로 사용되는 지정자를 설명합니다.
Sr. 아니요 | 지정자 및 설명 |
---|---|
1 | [UNIT=] u 단위 번호 u는 9-99 범위의 숫자가 될 수 있으며 파일을 나타냅니다. 임의의 숫자를 선택할 수 있지만 프로그램의 모든 열린 파일에는 고유 한 번호가 있어야합니다. |
2 | IOSTAT= ios I / O 상태 식별자이며 정수 변수 여야합니다. open 문이 성공하면 반환 된 ios 값은 0이고 그렇지 않으면 0이 아닌 값입니다. |
삼 | ERR = err 오류 발생시 컨트롤이 점프하는 레이블입니다. |
4 | FILE = fname 파일명, 문자열. |
5 | STATUS = sta 파일의 이전 상태를 보여줍니다. 문자열이며 NEW, OLD 또는 SCRATCH 세 가지 값 중 하나를 가질 수 있습니다. 스크래치 파일은 닫히거나 프로그램이 종료 될 때 생성 및 삭제됩니다. |
6 | ACCESS = acc 파일 액세스 모드입니다. SEQUENTIAL 또는 DIRECT의 두 값 중 하나를 가질 수 있습니다. 기본값은 SEQUENTIAL입니다. |
7 | FORM = frm 파일의 형식화 상태를 제공합니다. FORMATTED 또는 UNFORMATTED 두 값 중 하나를 가질 수 있습니다. 기본값은 UNFORMATTED입니다. |
8 | RECL = rl 직접 액세스 파일의 각 레코드 길이를 지정합니다. |
파일이 열린 후 읽기 및 쓰기 명령문으로 액세스됩니다. 완료되면close 성명서.
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