我正在尝试将输入字符串放入子字符串数组中。输入文件中的数据数小于10但未知。每个数据之间的空格数也不清楚。
示例:
Asd B Cwqe21 Ddsw Eww
我对Fortran很新手,所以我不知道应该使用哪种格式。我的问题是我不知道数据的数量(这里我假设有5个),那么我怎样才能使代码工作? 我尝试了以下哪些不起作用:
CHARACTER (LEN=100), DIMENSION(10) :: string
READ (1,*) (string,I=1,10)
似乎我得到的错误是因为没有第6个字符串可以读取并放入字符串(6)。
我尝试使用“索引”来查找空格,但由于我不知道字符串中有多少个空格,所以它对我没用。
答案 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'