len_white Function

public elemental function len_white(string)

NAME

  len_white(3f) - [M_strings:LENGTH] get length of string trimmed
  of whitespace.
  (LICENSE:PD)

SYNOPSIS

integer function len_white(string)

 character(len=*) :: string

DESCRIPTION

  len_white(3f) returns the position of the last character in
  string that is not a whitespace character. The Fortran90 intrinsic
  LEN_TRIM() should be used when trailing whitespace can be assumed
  to always be spaces.

  This procedure was heavily used in the past because ANSI FORTRAN
  77 character objects are fixed length and blank padded and the
  LEN_TRIM() intrinsic did not exist. It should now be used only when
  whitespace characters other than blanks are likely.

OPTIONS

  string     input string whose trimmed length is being calculated
             ignoring all trailing whitespace characters.

RETURNS

  len_white  the number of characters in the trimmed string

EXAMPLE

Sample Program:

program demo_len_white

  use M_strings, only : len_white
  implicit none
  character(len=80) ::  s
  integer           :: lgth, lastnb
  intrinsic len

  s=' ABCDEFG abcdefg '
  lgth = len(s)
  lastnb = len_white(s)

  write(*,*) 'total length of variable is ',lgth
  write(*,*) 'trimmed length of variable is ',lastnb
  write(*,*) 'trimmed string=[',s(:lastnb),']'

 end program demo_len_white

Results:

 total length of variable is           80
 trimmed length of variable is           16
 trimmed string=[ ABCDEFG abcdefg]

NOTES

o len_white

  is a resource-intensive routine. Once the end of
  the string is found, it is probably best to keep track of it in
  order to avoid repeated calls to len_white. Because they
  might be more efficient, consider looking for vendor-supplied or
  system-optimized equivalents. For example:

     o lnblnk - Solaris f77
     o len_trim - FORTRAN 90

o Some compilers seem to have trouble passing a string of variable length properly. To be safe, use something like this:

   subroutine message(s)
    character(len=*) :: s ! s is of variable length
       lgth=len(s)        ! get total length of variable
       ! explicitly specify a substring instead of just variable name
       lastnb = len_white(s(:lgth))
       write(*,*)'error:[',s(:lastnb),']'
   end subroutine messages

AUTHOR

John S. Urban

LICENSE

Public Domain

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: string

Return Value integer


Contents

Source Code


Source Code

elemental integer function len_white(string)
!  DEPRECATED. Use len_trim(3f),trim(3f) unless you might have trailing nulls (common when interacting with C procedures)"
!  John S. Urban, 1984, 1997-12-31
!  Note that if the string is blank, a length of 0 is returned; which is not a legal string length in Fortran77.
!  this routine used to return one instead of zero.
!   - mod 1:     1994
!                added null (char(0)) because HP and some Suns not padding
!                strings with blank, but with null characters; 1994 JSU
!   - mod 2:     1999
!                update syntax with INTENT(), ENDDO, no RETURN
!                still need instead of LEN_TRIM() because some systems stil pad CHARACTER with NULL
!-----------------------------------------------------------------------------------------------------------------------------------

! ident_15="@(#) M_strings len_white(3f) return position of last non-blank/non-null character in string"

character(len=*),intent(in):: string ! input string to determine length of
integer                    :: i10
intrinsic len
   len_white=0
   do i10=len(string),1,-1
      select case(string(i10:i10))
      case(' ')                 ! space(32)
      case(char(0))             ! null(0)
      case(char(9):char(13))    ! tab(9), new line(10), vertical tab(11), formfeed(12), carriage return(13)
      case default
         len_white=i10
         exit
      end select
   enddo
end function len_white