switch(3f) - [M_strings:ARRAY] converts between CHARACTER scalar and array of single characters (LICENSE:PD)
Synopsis
Description
Examples
Author
License
pure function switch((string)) result ((array))pure function switch(array) result ((string))
character(len=1),intent(in) :: array(:) character(len=SIZE(array)) :: string
or
character(len=1),intent(in) :: array(:) character(len=SIZE(array)) :: string
SWITCH(3f): generic function that switches CHARACTER (string) to an (array) of single characters or an (array) of single characters to a CHARACTER (string). Useful in passing strings to C. New Fortran features may supersede these routines.
Sample program:
program demo_switch use M_strings, only : switch, isalpha, islower, nospace character(len=*),parameter :: dashes=----------------------------------- character(len=*),parameter :: string=This is a string of letters character(len=1024) :: lineExpected output! First, examples of standard Fortran features write(*,*)[A,=,=,=,=,=].eq.= ! returns array [F,T,T,T,T,T] write(*,*)all([=,=,=,=,=,=].eq.=) ! this would return T write(*,*)all([A,=,=,=,=,=].eq.=) ! this would return F
! so to test if the string DASHES is all dashes using SWITCH(3f) is if(all(switch(dashes).eq.-))then write(*,*)DASHES is all dashes endif
! so to test is a string is all letters ! isalpha(3f) returns .true. only if character is a letter write(*,*) all(isalpha(switch(dashes))) ! false because dashes are not a letter write(*,*) all(isalpha(switch(string))) ! false because of spaces write(*,*) all(isalpha(switch(nospace(string)))) ! true because removed whitespace
! to see if a string is all uppercase write(*,*) string ! show the string write(*,(1x,*("[",a,"]":))) switch(string) ! converted to character array write(*,(*(l3))) islower(switch(string))
line=nospace(string) ! we need a string that is all letters write(*,*)LINE=,trim(line) write(*,*) islower(switch(nospace(string))) ! all true except first character write(*,*) all(islower(switch(nospace(string)))) ! should be false write(*,*) all(islower(switch(nospace(string(2:))))) ! should be true
end program demo_switch
> F T T T T T > T > F > DASHES is all dashes > F > F > T > This is a string of letters > [T][h][i][s][ ][i][s][ ][a][ ][s][t][r][i][n][g][ ][o][f][ ][l][e][t][t][e][r][s] > F T T T F T T F T F T T T T T T F T T F T T T T T T T > LINE=Thisisastringofletters > F T T T T T T T T T T T T T T T T T T T T T > F > T
John S. Urban
Public Domain
switch (3) | July 05, 2020 |