Text Data Processing
Character Scan
Count Matches
A loop over character slices can count simple text features while keeping every step explicit.
Program
Play the program to choose which character to count in the sample text.
character_scan.f90
program character_scan_demo
implicit none
integer :: target_index
integer :: i, hits
character(len=12) :: text
character(len=1) :: target
text = 'banana band'
target_index =
select case (target_index)
case (1)
target = 'a'
case (2)
target = 'n'
case default
target = 'b'
end select
hits = 0
do i = 1, len_trim(text)
if (text(i:i) == target) hits = hits + 1
end do
print '(A, 1X, I0)', target, hits
end program character_scan_demo
program character_scan_demo
implicit none
integer :: target_index
integer :: i, hits
character(len=12) :: text
character(len=1) :: target
text = 'banana band'
target_index =
select case (target_index)
case (1)
target = 'a'
case (2)
target = 'n'
case default
target = 'b'
end select
hits = 0
do i = 1, len_trim(text)
if (text(i:i) == target) hits = hits + 1
end do
print '(A, 1X, I0)', target, hits
end program character_scan_demo
program character_scan_demo
implicit none
integer :: target_index
integer :: i, hits
character(len=12) :: text
character(len=1) :: target
text = 'banana band'
target_index =
select case (target_index)
case (1)
target = 'a'
case (2)
target = 'n'
case default
target = 'b'
end select
hits = 0
do i = 1, len_trim(text)
if (text(i:i) == target) hits = hits + 1
end do
print '(A, 1X, I0)', target, hits
end program character_scan_demo
character slice
`text(i:i)` reads one character at position `i`.
counter loop
The loop increments `hits` only when the selected character matches.
len_trim
`len_trim(text)` keeps the scan inside the visible text.