zpad Interface

public interface zpad

Contents


Module Procedures

private function zpad_scalar(valuein, length) result(strout)

NAME

zpad(3f) - [M_strings:LENGTH] pad a string on the left with zeros to
specified length
(LICENSE:PD)

SYNOPSIS

function zpad(valuein,length) result(strout)

 class*,intent(in)           :: valuein(..)
 integer,intent(in),optional :: length

DESCRIPTION

zpad(3f) crops the input string or integer (which will be converted
to a string) and then pads it on the left with zeros to at least
the specified length. If the trimmed input string is longer than the
requested length the original string is returned trimmed of leading
and trailing spaces.

For strings representing unsigned numbers this is basically an alias for

    strout=pad(str,length,'0',clip=.true.,right=.false.)

For integers the same is often done with internal WRITE(3f) statements
such as

    write(strout,'(i5.5)')ivalue

but unlike internal I/O the function call can be used in expressions
or passed as a procedure argument. If the requested length is exceeded
the returned string is untruncated but cropped of leading and trailing
spaces.

OPTIONS

str      May be a scalor or vector string or integer. The input string
         to return trimmed, but then padded to the specified length
         if shorter than length. If an integer is input it is first
         converted to a string. If the leftmost non-blank character
         is a sign character it is moved to the left-most position
         of the output.
length   The minimum string length to return. If not present, the
         length of the input parameter STR is used. If the input value
         STR is not a string no zero padding occurs if LENGTH is not
         supplied.

RETURNS

strout  The input string padded to the requested length or the trimmed
        input string if the input string is longer than the requested
        length.

EXAMPLE

Sample Program:

  program demo_zpad
   use M_strings, only : zpad
   implicit none
   integer :: lun, i
      write(*,'("[",a,"]")') zpad( '111', 5)
      write(*,'("[",a,"]")') zpad( '123456789', 5)
      write(*,'("[",a,"]")') zpad( '  34567  ', 7)
      write(*,'("[",a,"]")') zpad( valuein=42 , length=7)
      write(*,'("[",a,"]")') zpad( '  +34567  ', 7)
      write(*,'("[",a,"]")') zpad( '  -34567  ', 7)
      write(*,'("[",a,"]")') zpad(1234)
      write(*,'("[",a,"]")') zpad(-1234)
      write(*,'("[",a,"]")') zpad(1234,8)
      write(*,'("[",a,"]")') zpad(-1234,8)
      write(*,'("[",a,"]")') zpad('')
      write(*,'("[",a,"]")') zpad('0')
      write(*,'("[",a,"]")') zpad('0    ')
      write(*,'("[",a,"]")') zpad('     ')
      write(*,'("[",a,"]")') zpad([1,10,100,1000,10000,100000],8)

      ! open output_00085.dat
      i=85
      open(newunit=lun,file='output_'//zpad(i,5)//'.dat')
      close(unit=lun,status='delete')

  end program demo_zpad

Results:

   [00111]
   [123456789]
   [0034567]
   [0000042]
   [+0034567]
   [-0034567]
   [1234]
   [-1234]
   [00001234]
   [-00001234]
   []
   [0]
   [00000]
   [00000]
   [00000001]
   [00000010]
   [00000100]
   [00001000]
   [00010000]
   [00100000]

AUTHOR

John S. Urban

LICENSE

Public Domain

Arguments

Type IntentOptional Attributes Name
class(*), intent(in) :: valuein
integer, intent(in), optional :: length

Return Value character(len=:), allocatable

private function zpad_vector(valuein, length) result(strout)

Arguments

Type IntentOptional Attributes Name
class(*), intent(in) :: valuein(:)
integer, intent(in), optional :: length

Return Value character(len=:), allocatable, (:)