demo5.f90 – M_CLI2
Author: John S. Urban
Description: command line parsing

# demo5.f90 Source File

- 45 statements
- Source File

### Contents

### Programs

demo5

### Source Code

demo5.f90

## Source Code

    program demo5
    !! @(#) _CHARACTER_ type values
    !! character variables have a length, unlike number variables
    use M_CLI2, only : set_args, get_args
    use M_CLI2, only : get_args_fixed_size, get_args_fixed_length
    use M_CLI2, only : sget, sgets
    implicit none

    character(len=*),parameter   :: fmt='(*("[",g0,"]":,1x))'

       print *,'demo5: CHARACTER argument examples'

       call set_args(' &
       & --alloc_len_scalar " " &
       & --fx_len_scalar " " &
       & --alloc_array "A,B,C" &
       & --fx_size_fx_len "A,B,C" &
       & --fx_len_alloc_array "A,B,C" &
       & ')

       block
       ! you just need get_args(3f) for general scalars or arrays
       ! variable length scalar
       character(len=:),allocatable  :: alloc_len_scalar
       ! variable array size and variable length
       character(len=:),allocatable  :: alloc_array(:)
       call get_args('alloc_len_scalar',        alloc_len_scalar)
       write(*,fmt)'allocatable length scalar=',alloc_len_scalar,&
       & len(alloc_len_scalar)

       call get_args('alloc_array',             alloc_array)
       write(*,fmt)'allocatable array=        ',alloc_array
       endblock

       ! less commonly, if length or size is fixed, use a special function

       block
       character(len=19),allocatable                 :: fx_len_alloc_array(:)
       call get_args_fixed_length('fx_len_alloc_array', fx_len_alloc_array)
       write(*,fmt)'fixed length allocatable array=',   fx_len_alloc_array
       endblock

       block
       character(len=19)                        :: fx_len_scalar
       call get_args_fixed_length('fx_len_scalar', fx_len_scalar)
       write(*,fmt)'fixed length scalar=        ', fx_len_scalar
       endblock

       block
       character(len=19)                        :: fx_size_fx_len(3)
       call get_args_fixed_size('fx_size_fx_len',  fx_size_fx_len)
       write(*,fmt)'fixed size fixed length=    ', fx_size_fx_len
       endblock

       block
       ! or (recommended) set to an allocatable array and check size and
       ! length returned
       character(len=:),allocatable  :: a        ! variable length scalar
       character(len=:),allocatable  :: arr(:)   ! variable array size and variable length
       call get_args('fx_size_fx_len',arr)
       ! or
       arr=sgets('fx_size_fx_len')
       if(size(arr) /= 3)write(*,*)'not right size'
       if(len(arr) > 19)write(*,*)'longer than wanted'

       call get_args('fx_len_scalar',a)
       !or
       a=sget('fx_len_scalar')
       if(len(a) > 19)write(*,*)'too long'
       write(*,*)a,len(a)
       write(*,*)arr,len(arr),size(arr)

       endblock

    end program demo5