C Library Functions  - specified (3)

NAME

specified(3f) - [ARGUMENTS:M_CLI2] return true if keyword was present on command line (LICENSE:PD)

CONTENTS

Synopsis
Description
Options
Returns
Example
Author
License

SYNOPSIS

elemental impure function specified(name)

    character(len=*),intent(in) :: name
    logical :: specified

DESCRIPTION

specified(3f) returns .true. if the specified keyword was present on the command line.

M_CLI2 intentionally does not have validators except for SPECIFIED(3f) and of course a check whether the input conforms to the type when requesting a value (with get_args(3f) or the convenience functions like inum(3f)).

Fortran already has powerful validation capabilities. Logical expressions ANY(3f) and ALL(3f) are standard Fortran features which easily allow performing the common validations for command line arguments without having to learn any additional syntax or methods.

OPTIONS

NAME name of commandline argument to query the presence of. Long names should always be used.

RETURNS

SPECIFIED
  returns .TRUE. if specified NAME was present on the command line when the program was invoked.

EXAMPLE

Sample program:

   program demo_specified
   use, intrinsic :: iso_fortran_env, only : &
   & stderr=>ERROR_UNIT, stdin=>INPUT_UNIT, stdout=>OUTPUT_UNIT
   use M_CLI2,  only : set_args, igets, rgets, specified, sget, lget
   implicit none

! Define args integer,allocatable :: ints(:) real,allocatable :: floats(:) logical :: flag character(len=:),allocatable :: color character(len=:),allocatable :: list(:) integer :: i

call set_args(’& & --color:c "red" & & --flag:f F & & --ints:i 1,10,11 & & --floats:T 12.3, 4.56 & & ’) ints=igets(’ints’) floats=rgets(’floats’) flag=lget(’flag’) color=sget(’color’)

write(*,*)’color=’,color write(*,*)’flag=’,flag write(*,*)’ints=’,ints write(*,*)’floats=’,floats

write(*,*)’was -flag specified?’,specified(’flag’)

! elemental write(*,*)specified([’floats’,’ints ’])

! If you want to know if groups of parameters were specified use ! ANY(3f) and ALL(3f) write(*,*)’ANY:’,any(specified([’floats’,’ints ’])) write(*,*)’ALL:’,all(specified([’floats’,’ints ’]))

! For mutually exclusive if (all(specified([’floats’,’ints ’])))then write(*,*)’You specified both names --ints and --floats’ endif

! For required parameter if (.not.any(specified([’floats’,’ints ’])))then write(*,*)’You must specify --ints or --floats’ endif

! check if all values are in range from 10 to 30 and even write(*,*)’are all numbers good?’,all([ints>=10,ints<= 30,(ints/2)*2==ints])

! perhaps you want to check one value at a time do i=1,size(ints) write(*,*)ints(i),[ints(i) >= 10,ints(i) <= 30,(ints(i)/2)*2 == ints(i)] if(all([ints(i) >= 10,ints(i) <= 30,(ints(i)/2)*2 == ints(i)]) )then write(*,*)ints(i),’is an even number from 10 to 30 inclusive’ else write(*,*)ints(i),’is not an even number from 10 to 30 inclusive’ endif enddo

list = [character(len=10) :: ’red’,’white’,’blue’] if( any(color == list) )then write(*,*)color,’matches a value in the list’ else write(*,*)color,’not in the list’ endif

if(size(ints).eq.3)then write(*,*)’ints(:) has expected number of values’ else write(*,*)’ints(:) does not have expected number of values’ endif

end program demo_specified

Default output

 > color=red
 > flag= F
 > ints=           1          10          11
 > floats=   12.3000002       4.55999994
 > was -flag specified? F
 > F F
 > ANY: F
 > ALL: F
 > You must specify --ints or --floats
 >           1 F T F
 >           1  is not an even number from 10 to 30 inclusive
 >          10 T T T
 >          10  is an even number from 10 to 30 inclusive
 >          11 T T F
 >          11  is not an even number from 10 to 30 inclusive
 > red matches a value in the list
 > ints(:) has expected number of values

AUTHOR

John S. Urban, 2019

LICENSE

Public Domain


Nemo Release 3.1 specified (3) July 22, 2023
Generated by manServer 1.08 from c64b060c-77c4-4ee9-96d1-187d995e6386 using man macros.