write(*, label) list-of-variables
label format format-code
다음은 구체적인 예이다. 정수 변수 하나의 값을 4 자를 찍을 수 있는 공간에 인쇄하고 실수 변수 하나를 소수점 아래 3 자리까지 고정된 형태로 인쇄하고자 할 때는 다음과 같이 한다.
write(*, 900) i, x
900 format (I4,F8.3)
format의 문장 번호 900은 임으로 선택한 것이다. 보통 이래로 내려가면서 큰 번호를 사용하는 것이 편리하다. format 다음에 괄호(parenthesis)를 하고 그 안에 format code를 적는다. I4는 4칸에 정수를, F8.3 는 8칸에 실수를 소수점 아래 3자리의 고정된 형태로 인쇄하라는 뜻이다.
format 문은 그 프로그램 안의 어느 곳에 있어도 상관없다. 보통 입출력 문 바로 다음에 해당 format 문을 놓거나 프로그램 끝에 모든 format 문을 모아 놓는 방법을 사용한다.
A - 문자열 (text string) D - 배수정밀도, 지수 표시 (double precision numbers, exponent notation) E - 실수, 지수 표시 (real numbers, exponent notation) F - 실수, 고정 형식 (real numbers, fixed point format) I - 정수 (integer) X - 수평 띠기 (horizontal skip (space)) / - 수직 띠기 (새 줄) (vertical skip (newline))format 형식 F (또는 D, E)는 일반적으로 Fw.d가 되는데 여기서 w는 숫자를 적을 전체 칸을 나타내는 정수 상수이고 d는 유효 숫자를 나타내는 정수 상수이다.
정수의 경우에는 전체 폭만을 규정하면 되므로 Iw의 형식이 된다. 마찬가지로 문자열은 Aw로 규정할 수 있는데 전체 폭을 적지 않기도 한다.
숫자나 문자열이 전체 칸보다 작으면 빈칸(space)로 채워진다. 보통 문자의 경우에는 오른쪽에 맞추오지지만 정확한 것은 format code마다 다르다.
수평 띠기를 할 때는 nX code를 사용한다. 아는 n 개의 수평 빈 칸을 의미한다. n은 생략할 수 있고 이 경우 n=1 을 의미한다. 수직 띠기 (새 줄)은 /를 사용한다. slash 하나가 새 줄 하나를 의미한다. 각각의 read 나 write 문은 새줄(newline)로 끝난다는 점을 주의한다. (이 것이 C와 다른 점이다)
x = 0.025
write(*,100) 'x=', x
100 format (A,F)
write(*,110) 'x=', x
110 format (A,F5.3)
write(*,120) 'x=', x
120 format (A,E)
write(*,130) 'x=', x
130 format (A,E8.1)
는 다음과 같은 출력을 만든다.
x= 0.0250000 x=0.025 x= 0.2500000E-01 x= 0.3E-01Note how blanks are automatically padded on the left and that the default field width for real numbers is usually 14. 왼쪽이 어떻게 빈칸으로 채워졌는지 살펴 보고 실수의 기 설정된 폭은 보통 14임을 알아 둔다. 또 Fortran 77에서 0-4의 숫자는 버리고 5-9는 올리는 반올림하는 것을 볼 수 있다.
이 예에서는 각각의 write 문이 다른 format 문을 사용하였다. 하지만 다른 write 문에서 같은 format 문을 사용하여도 관계없다. 사실상 이것이 format 문을 사용하는 장점이다. In fact, this is one of the main advantages of using format statements. 예를 들어 표를 만들 때 각각의 줄이 같은 형식이 되도록 할 경우 편리하다.
write (*,'(A, F8.3)') 'The answer is x = ', x
는 다음과 같다.
write (*,990) 'The answer is x = ', x
990 format (A, F8.3)
또는 문자열을 format 문 안에 넣을 수 있다.
write (*,999) x
999 format ('The answer is x = ', F8.3)
do 10 i = 1, 5
write(*,1000) (a(i,j), j=1,10)
10 continue
1000 format (I6)
이 경우 줄에 대하여는 명백한 (explicit) do loop를 사용하였고 칸에 대하여는 은연중에 내재한 implicit loop를 사용하였다.
format 문에는 다음과 같이 반복할 경우가 있다.
950 format (2X, I3, 2X, I3, 2X, I3, 2X, I3)이를 간단히 나타내면
950 format (4(2X, I3))또 명백하게 몇 번 반복하는지 나타내지 않고 반복하는 경우도 가능하다. vector의 처음 50 개를 한 줄에 10 개씩 인쇄하고자 할 때 다음과 같이 할 수 있다.
write(*,1010) (x(i), i=1,50)
1010 format (10I6)
format문에 의하면 열 개의 수자를 인쇄하여야 한다. 하지만 write 문에서는 50 개를 인쇄하려고 한다. 따라서 처음 10 개의 숫자를 인쇄한 뒤 같은 format 문을 사용하여 다음 10 개를 인쇄하고 그 다음에도 반복한다.
write(*,100) 12, 12345
write(*,110) 0.12345
write(*,110) 123.45
write(*,110) 12345.0
100 format (I4, 2X, I4)
110 format (F6.2)
| 1 | |||||||||||||
| 1 | 1 | ||||||||||||
| 1 | 2 | 1 | |||||||||||
| 1 | 3 | 3 | 1 | ||||||||||
| 1 | 4 | 6 | 4 | 1 | |||||||||
| 1 | 5 | 10 | 10 | 5 | 1 | ||||||||
| 1 | 6 | 15 | 20 | 15 | 6 | 1 |