如何检测换行符或制表符( 或 ) 在读取未格式化的流文件时?

问题描述 投票:0回答:1

我正在将文件读入这样的字符串:

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 会自动忽略这些字符吗?如果是,我怎样才能让它检测到它们?

fortran gfortran
1个回答
1
投票

您应该能够直接与先前指定的字符进行比较,例如下面代码中的 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
© www.soinside.com 2019 - 2024. All rights reserved.