Fortran - 包含未知字符的字符串到子字符串中

时间:2014-06-08 20:31:08

标签: fortran fortran90

我正在尝试将输入字符串放入子字符串数组中。输入文件中的数据数小于10但未知。每个数据之间的空格数也不清楚。

示例:

Asd  B       Cwqe21 Ddsw      Eww

我对Fortran很新手,所以我不知道应该使用哪种格式。我的问题是我不知道数据的数量(这里我假设有5个),那么我怎样才能使代码工作? 我尝试了以下哪些不起作用:

CHARACTER (LEN=100), DIMENSION(10) :: string
READ (1,*) (string,I=1,10)

似乎我得到的错误是因为没有第6个字符串可以读取并放入字符串(6)。

我尝试使用“索引”来查找空格,但由于我不知道字符串中有多少个空格,所以它对我没用。

2 个答案:

答案 0 :(得分:2)

我不知道这是否比M.S.B评论中的标准方法更优雅/更有效率,但却是一个有趣的选择。

  integer istart,nw
  character (len=100) line,wd,words(100)
  open(1,file='t.dat')
  read(1,'(a)')line
  istart=1
  nw=0
  do while(len(trim(line(istart:))).gt.0)
     read(line(istart:),*)wd
     istart=istart+index(line(istart:),trim(wd))+len(trim(wd))
     nw=nw+1
     words(nw)=trim(wd)
  enddo            
  write(*,*)trim(line)
  write(*,*)('/',trim(words(k)),k=1,nw),'/'
  end

答案 1 :(得分:1)

一种编程简单的低效方法是尝试读取最大数量的项目,如果这不能连续尝试读取少一项,直到读取成功,如下所示:

program xread_strings
integer, parameter   :: nw = 10
character (len=1000) :: text
character (len=20)   :: words(nw)
integer              :: i,ierr,nread
text = "Asd  B       Cwqe21 Ddsw      Eww"
nread = 0
do i=nw,1,-1
   read (text,*,iostat=ierr) words(:i)
   if (ierr == 0) then
      nread = i
      exit
   end if
end do
if (nread > 0) write (*,*) "read ",nread," words: ",("'"//trim(words(i)) // "' ",i=1,nread)
end program xread_strings
! g95 Output:
! read  5  words: 'Asd' 'B' 'Cwqe21' 'Ddsw' 'Eww'