tostring in Fortran Wiki
## NAME ## tostring(3f) - [M_tostring] converts any standard scalar type to a string ## SYNOPSIS ## function tostring(g1,g2.g3,g4,g5,g6,g7,g8,g9) class(*),intent(in),optional :: g1,g2,g3,g4,g5,g6,g7,g8,g9 character,len=(:),allocatable :: tostring ## DESCRIPTION ## **tostring(3f)** builds a space-separated string from up to nine scalar values. Requires modern Fortran. Shows an example of __unlimited polymorphic arguments__, __optional arguments__, and __new forms of formats__. Tested with GNU Fortran 7.3.0. ## OPTIONS ## **g[1-9]** :optional value to convert to a string. May be of type INTEGER, LOGICAL, REAL, DOUBLEPRECISION, COMPLEX, or CHARACTER. ## RETURNS ## **tostring** : string representing all the input values ## EXAMPLES ## Sample program: program demo_tostring use M_tostring, only : tostring implicit none character(len=:),allocatable :: pr pr=tostring('HUGE(3f) integer',huge(0),'and real',huge(0.0),'and double',huge(0.0d0)) write(*,'(a)')pr pr=tostring('real :',huge(0.0),0.0,12345.6789,tiny(0.0) ) write(*,'(a)')pr pr=tostring('doubleprecision :',huge(0.0d0),0.0d0,12345.6789d0,tiny(0.0d0) ) write(*,'(a)')pr pr=tostring('complex :',cmplx(huge(0.0),tiny(0.0)) ) write(*,'(a)')pr end program demo_tostring Expected output: HUGE(3f) integer 2147483647 and real 3.40282347E+38 and double 1.7976931348623157E+308 real : 3.40282347E+38 0.00000000 12345.6787 1.17549435E-38 doubleprecision : 1.7976931348623157E+308 0.0000000000000000 12345.678900000001 2.2250738585072014E-308 complex : (3.40282347E+38,1.17549435E-38) ~~~~~~~~~~ {: lang=fortran} module M_tostring implicit none private public tostring contains function tostring(generic1, generic2, generic3, generic4, generic5, generic6, generic7, generic8, generic9) implicit none ! convert up to nine scalar intrinsic values to a string class(*),intent(in),optional :: generic1 ,generic2 ,generic3 ,generic4, generic5 class(*),intent(in),optional :: generic6 ,generic7 ,generic8 ,generic9 character(len=:), allocatable :: tostring character(len=4096) :: line integer :: istart istart=1 if(present(generic1))call print_generic(generic1) if(present(generic2))call print_generic(generic2) if(present(generic3))call print_generic(generic3) if(present(generic4))call print_generic(generic4) if(present(generic5))call print_generic(generic5) if(present(generic6))call print_generic(generic6) if(present(generic7))call print_generic(generic7) if(present(generic8))call print_generic(generic8) if(present(generic9))call print_generic(generic9) tostring=trim(line) contains !=================================================================================================================================== subroutine print_generic(generic) use,intrinsic :: iso_fortran_env, only : int8, int16, int32, int64, real32, real64, real128 class(*),intent(in),optional :: generic select type(generic) type is (integer(kind=int8)); write(line(istart:),'(i0)') generic type is (integer(kind=int16)); write(line(istart:),'(i0)') generic type is (integer(kind=int32)); write(line(istart:),'(i0)') generic type is (integer(kind=int64)); write(line(istart:),'(i0)') generic type is (real(kind=real32)); write(line(istart:),'(1pg0)') generic type is (real(kind=real64)); write(line(istart:),'(1pg0)') generic type is (real(kind=real128)); write(line(istart:),'(1pg0)') generic type is (logical); write(line(istart:),'(1l)') generic type is (character(len=*)); write(line(istart:),'(a)') generic type is (complex); write(line(istart:),'("(",1pg0,",",1pg0,")")') generic end select istart=len_trim(line)+2 end subroutine print_generic !=================================================================================================================================== end function tostring !=================================================================================================================================== end module M_tostring !=================================================================================================================================== ~~~~~~~~~~ category: code
AltStyle
によって変換されたページ
(->オリジナル)
/
アドレス:
モード:
デフォルト
音声ブラウザ
ルビ付き
配色反転
文字拡大
モバイル