我正在将文件读入这样的字符串:
character*50, intent(in) :: flname
character(len=:), allocatable :: str
integer size
inquire(file=flname, size=size)
allocate(character(len=size)::str)
open(1, file=flname, status='OLD', access='STREAM')
read(1) str
close(1)
我正在尝试遍历字符串并检测某些字符,包括新行 (' ') 或制表符 (' ')。但出于某种原因,我无法在文件中检测到这些字符。 Fortran 会自动忽略这些字符吗?如果是,我怎样才能让它检测到它们?
您应该能够直接与先前指定的字符进行比较,例如下面代码中的 NL、CR、HT。
program test
integer i
character, parameter :: NL = new_line( 'A' ) ! new line
character, parameter :: CR = achar( 13 ) ! carriage return
character, parameter :: HT = achar( 9 ) ! horizontal tab
character(len=50) :: flname = "test.f90"
character(len=:), allocatable :: str
integer size
inquire(file=flname, size=size)
allocate(character(len=size)::str)
open( 1, file=flname, status='OLD', access='STREAM' )
read(1) str
close(1)
do i = 1, size
select case( str(i:i) )
case( NL ); write(*,*) "New line"
case( CR ); write(*,*) "Carriage return"
case( HT ); write(*,*) "Horizontal tab"
case default; write(*,*) "Letter [", str(i:i), "]"
end select
end do
end program test