Fortran example
Case2.f
program sample
CHARACTER(len=16) :: cmd_option_name
CHARACTER(len=512) :: inputdeck, inputmesh
INTEGER :: num_of_args, i
LOGICAL :: args_error_flag = .false.
num_of_args = iargc()
do i=1, num_of_args, 2
call getarg(i,cmd_option_name)
if( cmd_option_name .eq. "-inp") then
call getarg(i+1,inputdeck)
else if ( cmd_option_name .eq. "-mesh") then
call getarg(i+1,inputmesh)
else
args_error_flag = .true.
WRITE (*,*) "ERROR: INVALID COMAND OPTION: " ,
+ cmd_option_name
endif
enddo
if ( args_error_flag .eqv. .true. ) then
WRITE(*,*) "CHECK YOUR COMAND OPTION"
stop
endif
inputdeck=trim(inputdeck)
inputmesh=trim(inputmesh)
write (*,*) "Input file path : ", inputdeck
write (*,*) "Input file path : ", inputmesh
end program
주요 변수 설명
cmd_option_name
: 커맨드 옵션(포트 명)을 저장하는 크기가 16인 character형 배열로 선언
inputdeck
: 입력 파일의 path를 저장하는 배열로 크기는 512인 characcter형 배열을 선언
num_of_args
: 실행 시 같이 입력된 argument의 개수를 저장하는 변수
args_error_flag = .false.
: 커맨드 옵션(포트 명)이 잘못 입력된 경우, 이 변수의 값을 .true.
로 변경
주요 코드 설명
...
num_of_args = iargc()
...
- iargc() 함수를 이용하여 입력된 argument의 개수를
num_of_args
변수에 저장
...
[1] do i=1, num_of_args, 2
[2] call getarg(i,cmd_option_name)
[3] if( cmd_option_name .eq. "-inp") then
call getarg(i+1,inputdeck)
[4] else if ( cmd_option_name .eq. "-mesh") then
call getarg(i+1,inputmesh)
[5] else
args_error_flag = .true.
write (*,*) "ERROR: INVALID COMAND OPTION: " ,
+ cmd_option_name
endif
enddo
...
- do loop를 이용해 num_of_args 개수 까지 i 값을 2씩 증가하면서 loop 문 수행
- 예제에서 iargc() 함수로 받은 값이 4 이므로 loop문이 두번 수행 됨
- getarg() 함수를 이용해 i번째 arument 값을
cmd_option_name
변수에 저장
- 저장한
cmd_option_name
값이 -inp와 같은지 확인하여 같으면, i+1번째 arument 값을 읽어서 inputdeck
배열에 저장.
- 저장한
cmd_option_name
값이 -mesh와 같은지 확인하여 같으면, i+1번째 arument 값을 읽어서 inputmesh
배열에 저장
cmd_option_name
값이 -inp와 -mesh 같지 않으면, args_error_flag
를 .false.
로 변경하고 잘못 입력한 커맨드 옵션을 출력