rm_comments Subroutine

public subroutine rm_comments(buffer, iline)

Remove comment from a string (anything after ! or #)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(inout) :: buffer

Input buffer

integer, intent(in), optional :: iline

Line number


Source Code

  subroutine rm_comments(buffer, iline)
    !! Remove comment from a string (anything after ! or #)
    implicit none

    ! Arguments
    character(*), intent(inout) :: buffer
    !! Input buffer
    integer, optional, intent(in) :: iline
    !! Line number

    ! Local variables
    integer :: lbracket, rbracket, iline_
    !! Bracket positions and line number

    iline_ = 0
    if(present(iline)) iline_ = iline

    if(scan(buffer, '!') .ne. 0) buffer = buffer(:(scan(buffer, '!') - 1))
    if(scan(buffer, '#') .ne. 0) buffer = buffer(:(scan(buffer, '#') - 1))
    do while(scan(buffer, '(') .ne. 0 .or. scan(buffer, ')') .ne. 0)
       lbracket = scan(buffer, '(', back = .true.)
       rbracket = scan(buffer(lbracket:), ')')
       if(lbracket .eq. 0 .or. rbracket .eq. 0)then
          write(6, '(A,I0)') &
               ' NOTE: a bracketing error was encountered on line ', iline_
          buffer = ""
          return
       end if
       rbracket = rbracket + lbracket - 1
       buffer = buffer(:(lbracket - 1)) // buffer((rbracket + 1):)
    end do
  end subroutine rm_comments