Fixed-length character variables often carry padding. adjustl, trim, and len_trim make the visible text explicit.

Program

Play the program to choose the amount of left padding and normalize the label.

pad_count
trimmed_text.f90
Replay: real traced execution (multi-file project)
program trimmed_text_demo
    implicit none
    integer :: pad_count
    integer :: visible
    character(len=20) :: raw
    character(len=20) :: cleaned

    pad_count = 2
    raw = repeat(' ', pad_count) // 'beta   '
    cleaned = adjustl(raw)
    visible = len_trim(cleaned)
    print '(A, 1X, I0)', trim(cleaned), visible
end program trimmed_text_demo
program trimmed_text_demo
    implicit none
    integer :: pad_count
    integer :: visible
    character(len=20) :: raw
    character(len=20) :: cleaned

    pad_count = 0
    raw = repeat(' ', pad_count) // 'beta   '
    cleaned = adjustl(raw)
    visible = len_trim(cleaned)
    print '(A, 1X, I0)', trim(cleaned), visible
end program trimmed_text_demo
program trimmed_text_demo
    implicit none
    integer :: pad_count
    integer :: visible
    character(len=20) :: raw
    character(len=20) :: cleaned

    pad_count = 4
    raw = repeat(' ', pad_count) // 'beta   '
    cleaned = adjustl(raw)
    visible = len_trim(cleaned)
    print '(A, 1X, I0)', trim(cleaned), visible
end program trimmed_text_demo
  1. pad_count ← 2

    8pad_count = 29raw = repeat(' ', pad_count) // 'beta   '
    values this step2pad_count
  2. raw ← beta

    8pad_count = 29raw = repeat(' ', pad_count) // 'beta   '10cleaned = adjustl(raw)
    values this step beta raw2pad_count
  3. cleaned ← beta

    9raw = repeat(' ', pad_count) // 'beta   '10cleaned = adjustl(raw)11visible = len_trim(cleaned)
    values this stepbetacleaned beta raw
  4. visible ← 4

    10cleaned = adjustl(raw)11visible = len_trim(cleaned)12print '(A, 1X, I0)', trim(cleaned), visible
    values this step4visiblebetacleaned
  5. print '(A, 1X, I0)', trim(cleaned), visible

    11    visible = len_trim(cleaned)12    print '(A, 1X, I0)', trim(cleaned), visible13end program trimmed_text_demo
    outputbeta 4
    values this stepbetacleaned4visible
  1. pad_count ← 0

    8pad_count = 09raw = repeat(' ', pad_count) // 'beta   '
    values this step0pad_count
  2. raw ← beta

    8pad_count = 09raw = repeat(' ', pad_count) // 'beta   '10cleaned = adjustl(raw)
    values this stepbeta raw0pad_count
  3. cleaned ← beta

    9raw = repeat(' ', pad_count) // 'beta   '10cleaned = adjustl(raw)11visible = len_trim(cleaned)
    values this stepbetacleanedbeta raw
  4. visible ← 4

    10cleaned = adjustl(raw)11visible = len_trim(cleaned)12print '(A, 1X, I0)', trim(cleaned), visible
    values this step4visiblebetacleaned
  5. print '(A, 1X, I0)', trim(cleaned), visible

    11    visible = len_trim(cleaned)12    print '(A, 1X, I0)', trim(cleaned), visible13end program trimmed_text_demo
    outputbeta 4
    values this stepbetacleaned4visible
  1. pad_count ← 4

    8pad_count = 49raw = repeat(' ', pad_count) // 'beta   '
    values this step4pad_count
  2. raw ← beta

    8pad_count = 49raw = repeat(' ', pad_count) // 'beta   '10cleaned = adjustl(raw)
    values this step beta raw4pad_count
  3. cleaned ← beta

    9raw = repeat(' ', pad_count) // 'beta   '10cleaned = adjustl(raw)11visible = len_trim(cleaned)
    values this stepbetacleaned beta raw
  4. visible ← 4

    10cleaned = adjustl(raw)11visible = len_trim(cleaned)12print '(A, 1X, I0)', trim(cleaned), visible
    values this step4visiblebetacleaned
  5. print '(A, 1X, I0)', trim(cleaned), visible

    11    visible = len_trim(cleaned)12    print '(A, 1X, I0)', trim(cleaned), visible13end program trimmed_text_demo
    outputbeta 4
    values this stepbetacleaned4visible
repeat `repeat(' ', pad_count)` creates a controlled amount of padding.
adjustl `adjustl` moves visible text to the left side of the character value.
len_trim `len_trim` counts non-padding characters.