2013-11-09 5 views
1

이것은 내 get_command_argument() question의 후속 조치입니다.문자열을 정수로 변환합니다.

저는 명령 행 인자 (arg)를 포트란 프로그램으로 읽었습니다. 그런 다음 arg의 값을 정수로 저장하려고합니다. ichar()이 작업을 수행하지 않습니다.

이것은 기본적인 것 같습니다. 그래서 분명히 뭔가 잘못하고있는 것 같습니다. 어떤 힌트?

program test_get_command_argument 
    integer :: i,j 
    character(len=32) :: arg 

    i = 0 
    do 
     call get_command_argument(i,arg) 
     if (LEN_TRIM(arg) == 0) EXIT 

     write (*,*) trim(arg) 
     i = i + 1 
    end do 

    j = ichar(arg) 


end program 
+0

뭐가 잘못 (http://gcc.gnu.org/onlinedocs/gfortran/ICHAR.html)는, 저런, 포트란 C와 다른 많은입니다 ;-) – seb

+0

@HighPerformanceMark는 인수의 수만 반환합니다 ([here] (http://gcc.gnu.org/onlinedocs/gfortran/COMMAND_005fARGUMENT_005fCOUNT.html) 참조). 그러나 나는 여전히 인수의 실제 값을 가지고 작업하는 것을 좋아합니다. – seb

답변

1

"내부 파일"기능을 사용하려고합니다. read(arg,*) j과 같은 진술을해야합니다. 문자 변수 arg을 마치 파일 인 것처럼 읽고 결과를 j에 저장합니다. 명령 줄 인수를 반복 할 기괴한 방법

:

+0

방금 ​​시도했습니다. get_command_argument() 호출 후 ** read (arg, '(I32)') j **를 줄에 넣었지만 런타임에 오류가 발생했습니다. ** 목록 입력에서 항목 1의 잘못된 정수 ** – seb

+0

got it , 나는 C에서 argc와 argv에 너무 익숙하다. get_command_argument() *의 첫 번째 인자 **가 실제로 실행 파일을 호출한다는 사실을 완전히 놓쳤다. :-) – seb

+1

첫 번째 인수가 의미하는 바에 달려 있습니다 ... fortran은 일반적으로 C 기반의 0 기반이 아닌 1 기반입니다. 'get_command_argument'는 내가 본 유일한 예외입니다. 여기서 '0'은 프로그램의 이름을 의미하고 '1'은 프로그램에 첫 번째 인자를 의미합니다. – dwwork

1

이 대답하지만, 확장 된 코멘트가 없습니다. 그것을 [여기]를 얻은 간단하고 명백한

do i = 1, command_argument_count() 
    call get_command_argument(i,arg) 
    ! do funky stuff  
end do 
+0

나는 동의한다. 이 예가 [gcc.gnu.org 웹 사이트] (http://gcc.gnu.org/onlinedocs/gfortran/GET_005fCOMMAND_005fARGUMENT.html)에서 발견되었습니다. – seb

관련 문제