2009-07-14 4 views
9

이 질문이 중복되는 경우 실례지만, 이와 같은 내용은 전혀 볼 수 없습니다.FORTRAN READ()

FORTRAN에서 READ()는 무엇을합니까? 예를 들어

:

READ(1,82) 
+3

"포트란"과 "초보자"를 결합해야합니다. – stevedbrown

답변

14

1은 적절한 공모로 열 수있는 파일 핸들입니다. 82는 형식을 나타내는 레이블로서 시각적 형식으로 데이터를보고하는 방법을 의미합니다. 이 예에서

 program foo 
     implicit none 
     integer :: i 
     double precision :: a 

     write (*,*) 'give me an integer and a float' 
     read (*,82) i,a 
     write (*,82) i,a 
82  format (I4, F8.3) 
     end program 

, 프로그램은 표준 입력 받아 (그 유닛 번호를 지정하지 않고, 그래서 A *)를 넣어 정수 및 부동 소수점 값. 형식은 정수가 처음 네 개의 열을 차지한다고 말하면 소수점 이하 3 자리 숫자로 된 8 열의 부동 소수점을 갖습니다.

지금 프로그램을 실행하고 정확하게이 형식을 따르지 않으면 첫 번째 4 개의 열은 정수 (I4 형식으로 인해)를 나타낼 것이기 때문에 프로그램은 불평하고 충돌 할 것입니다. "5 3." (숫자 5 전에 세 개의 공간을 유의하시기 바랍니다) 올바른 작업을 수행합니다 그러나 유효한 정수

$ ./a.out 
give me an integer and a float 
5 3.5 
At line 7 of file test.f (Unit 5) 
Traceback: not available, compile with -ftrace=frame or -ftrace=full 
Fortran runtime error: Bad value during integer read 

, 올바른 사양하지

$ ./a.out 
give me an integer and a float 
    5 3.5 
    5 3.500 
$ 
(약간의 허용 오차, 그것은 엄격한 것이 아니에요)
+0

감사합니다. 나는이 설명을 정확히 둘러 보았습니다. – SRG

6

레이블 82의 FORMAT 문에 따라 "단위"(열린 파일) 번호 1에서 읽습니다. 그러나이 문은 변수를 나열하지 않기 때문에 읽는 데이터를 넣을 곳이 없으므로 도움; READ(1,82) FOOBAR은 변수 FOOBAR에 읽고있는 데이터를보다 유용하게 넣을 수 있습니다.

+1

IIRC에서 파일 번호 5는 stdin과 같으며 번호 6은 stdout과 같습니다. 파일 1은 아마도 파일 시스템의 파일 일 것입니다. 숫자가 테이프 드라이브에 매핑되도록 의도 된 것을 기억하는 것 같지만, 길고 오래 전이었습니다. –

+0

@David, heh yes, 내 젊음으로 나를 데려다 준다. -) –

+0

@David, @Alex, 이것이 내가 배운 첫 번째 프로그래밍 언어! 5와 6은 실제로 표준 입력과 출력 이었지만 명령 줄에서 다른 번호를 설정해야했습니다. 그리고 디스크, 테이프 드라이브, 가상 펀처 등을 설정할 수 있습니다. – azheglov

0

그것은

+0

그리고 대답은이 스레드에 어떻게 추가됩니까? – SilentGhost

3

(82) 당신은 포트란과 함께 몇 일을 할 수있는 번호가 문에 의해 지정된 형식을 사용하여 장치 1 읽기 문을 "읽기".

고려 : 읽기 제네릭 (단위 번호, 형식, 옵션) ...

read (7,*,end=10) 
, "7"에서 읽은 장치 번호입니다

는, "*"이 경우의 형식 (기본값)이고, "10"은 읽은 장치/파일이 eof에 도달 할 때 프로그램 제어가 점프하는 줄 번호입니다. "options"슬롯은 "err = '행 번호' '또는 iostat, advance ="no "와 같은 것으로 채울 수 있습니다. 체크 아웃 할 수 있습니다 some more of these

형식 부분은 예상되는 데이터의 형식을보다 정확하게 지정할 수있는 부분입니다. 당신이 같은 형식 지정이있는 경우 예를 들어, 다음은

read (25,"(2X, 2I5, F7.3, A)") 

을은 "2 배",이 개 공간을 말한다는 "2I5는"5 개 자리는 2 개 정수, "F7.3"를 의미한다, 10 진수 값을 말하며, 총 길이는 7이며, 소수점 이하 3 자리수입니다. "A"는 문자를 나타냅니다. 체크 아웃 할 수 있습니다. these

CHEERS!

0

Fortran이 파일에서 읽을 때, READ 문은 파일을 고유하게 식별해야합니다. 식별은 Fortran 유닛 ID를 사용하여 수행됩니다.

유닛 식별자는 다음 중 하나가 될 수

1) 값이 0

2)에 별표 (*)보다 크거나 같아야 만에 허용되는 정수 변수 또는 표현 READ 및 WRITE 문. READ 문에서 별표는 단위 100 (표준 입력)을 나타냅니다.

logical :: idok, fop 
inquire (unit=i, exist=idok, opened=fop) 
if (idok .and. .not. fop) then 
    open (unit = i, ...) 
endif 
:

단위 번호가 가장 newunit

open(newunit=i,file='test') 

사용 다음 예에서와 같이, 그것을 사용하기 전에 모든 장치 번호의 유효성 (존재를) 확인하는 INQUIRE 문을 사용하여 제공됩니다

그런 다음 형식이 표시되는 프로그램의 모든 부분에 나타날 수있는 레이블이있는 명령문 인 FORMAT 문이 있습니다.

그것은 형식이다

READ(*,100) I, J, K 

형식 문

100 FORMAT(I10,I10,I10) 

약간 다른 FORMAT 문 다시 폭 (10)의 세 오른쪽 정렬 정수를 산출

100 FORMAT(3I10.8) 

인 그러나 이번에는 최소 8 자릿수의 인쇄가 필요합니다.

+2

몇 가지 실수 : 유닛 식별자는 음수 일 수 있지만 (-1이 아닌) 'newunit'지정자로 만든 연결을 참조하는 경우입니다. '*'는 100을 의미하지 않는다; 가능한 한 100 ~ 102 개가 허용됩니다. 단위 0, 5 및 6은 분명히 어떤 것과 연관되어 있지 않습니다. format 문은 어디에서나 나타날 수 있지만 참조하는 데이터 전송 문과 동일한 포괄적 범위에 있어야합니다. – francescalus

+0

게시물을 업데이트합니다. – Zeus

+0

화면 출력에 '6'을 사용하는 코드가 있습니다. 세부 사항은 정확히 무엇입니까? – Zeus

1

"1"fortran에서 파일을 여는 데 사용한 단위와 "82"는 읽기 명령의 형식을 지정합니다. 포맷 (82)의 자세한 의해 지정된

open(1,file=fname,status='unknown') 
read(1,82) var_name 
82 format(2I5) 

상기 코드 판독 명령이 단위를 "1"판독 명령으로 개방되었을 때 파일 FNAME로부터 판독 형식 판독 "FNAME"라는 파일을 연다 포트란에서 서식을 지정하는 방법은 다음과 같습니다.

nim (Integer Specification) 
nfm.d (Floating point Specification) 
nEm.d(Exponential Specification) 
nAm (string specification) 

where 
"m" is the number of character spaces reserved for printing. (should be more than what you are reading otherwise read statement would not give correct results) 
"n" is the number of integers, floating point, characters or exponential numbers that you want to read. 
"d" are the number of decimal places up to which you want to read.