Search code examples
stringfunctionfortrancharactertrim

Character-returning function of unknown length


How to use character function of where the result is of unknown length initially?

The trim() function, I understand, shows that it is possible not to specify the length of returning string.

For example:

write (*,*) trim(str)

will return only part of the string without trailing spaces.

This function does not have any idea about the length of returning string before the call.

Or trim() function has limitations?

On more variant is to find original code of trim() function.

I have found (Returning character string of unknown length in fortran) but it is not the answer to my question.

To be sure, I want to write function, that returns string by integer number.

Something like this:

function strByInt(myInt)
...
write (strByInt,fmt) myInt; return
end function strByInt

somewhere else:

write (*,*) strByInt(50) ! will write '50'

Solution

  • That question you referenced partially answers it. It mentions the allocatable characters with deferred length. See below my implementation I use regularly:

      function strByInt(i) result(res)
        character(:),allocatable :: res
        integer,intent(in) :: i
        character(range(i)+2) :: tmp
        write(tmp,'(i0)') i
        res = trim(tmp)
      end function
    

    The result variable is allocated on assignment on the last line to fit the answer.

    The trim function is a different beast, as an intrinsic function it doesn't have to be programmed in Fortran and can obey different rules. It just returns what it needs to return. But it could be as well implemented as above quite easily.