2012-06-05 3 views
0

읽으려는 변수의 이름을 포함하는 문자열이 있는데이 문자열을 읽기 기능에 전달하고 싶습니다. 이것은 내가 변수의 이름으로 벡터를 변경하기 만하면 읽은 변수의 이름을 바꿀 수있게 해준다. 예는 수 :문자열에 FORTRAN READ 인수를 전달하십시오.

PROGRAM test 
implicit none 

    integer :: no, age 
    character(len=20) :: myname, vars 

vars='no, myname, age' 
read(*, '(i4,a20,i4)') vars 
print*, no, myname, age 

END PROGRAM test 

이 가능합니까?

답변

1

"NAMELIST"I/O를 살펴볼 수 있습니다. 종종 이름 목록 IO에는 다양한 문제가 있으며 사람들은 종종 자신의 사용자 지정 IO 루틴을 작성하는 데 의존합니다. 그러나 원하는대로 충분하다면 사용하기가 쉽습니다. 예 :

 

program nmltest 
    implicit none 
    real :: x 
    integer :: y 
    namelist /mynml/ x, y 
    x = 4711 
    y = 42 
    write(*, mynml) 
end program nmltest 
+0

답장을 보내 주셔서 감사합니다. @janneb. 공백 구분 기호 파일에서 데이터를 읽을 수 있습니까? –

+0

@ ManuelRamón : 아니요, 이름 목록 입력은 이름 목록 형식이어야합니다. 구문 예제는 내 테스트 프로그램의 출력을 참조하십시오. 다른 구문을 구문 분석해야하는 경우 자체 구문 분석 루틴을 롤 (또는 어딘가에서 수행 할 수있는 코드 찾기)해야합니다. – janneb

0

포트란은 컴파일 된 언어입니다. READ 문이 실행시 문자열 목록에서 변수 주소를 추출하는 것은 어렵습니다 (불가능할 수 있음). 그래서 janneb에서 언급했듯이 Fortran은 Fortran 90 이후 언어 표준의 일부가 된 NAMELIST 연산자를 제공합니다 (일부 Fortran 77에서도 이름 목록을 지원하지만 비표준이며 컴파일러간에 호환성이 보장되지 않았습니다). 그것은 그렇게 사용된다

! Input can contain comments starting with exclamation marks 

! And blank lines too 
&vars 
no = 12, 
myname = 'sometext'/ 

포맷 입력/출력 비록 NAMELIST 불가능 :

... 
NAMELIST /vars/ no, age, myname 
... 
READ(*, NML=vars) 
... 

입력은 다음과 같이 될 것이다.

+0

고마워요. @Hristo. NAMELIST 문을 이해하면 입력 파일은 특정 형식이어야합니다. 공백 구분 기호 파일을 읽는 작업을 수행 할 수있는 방법이 있습니까? –

+0

독자적인 입력 파서를 작성할 수는 있지만 지루하고 유연하지는 않습니다. –

관련 문제