哈哈哈超开心 发表于 2022-9-20 00:55:50

使用backspace语句出现问题

我的以下代码的backspace语句用的好像有问题,但不知如何修改,使用前都可以正常读取数据,用了backspace就好像陷入无限循环。我的目的是想在文件里读取到符合条件的str1字符串后,再返回前面某一行,读取到与str1相关的的一行也就是str2字符串(前面有很多符合‘str2(1:1)==‘#’’的行,但是就只取离str1最近的前面某一行)。请大佬赐教!!!
program read_1line
    implicit none

    character(130)::str1
    character(52)::str2
    real,dimension(63):: cross
    integer::rows
    open(unit=12,file='cinder.dat',status='old')
    do rows=1,162309
      read(12,'(a130)') str1,str2
      if(str1(1:8)=='   #3215') then
      write(*,*) str1
      read(12,*)cross
      write(*,*)cross
      read(12,'(a130)') str2
      do while(str2(1:1).ne.'#')
            backspace(unit=12)
      end do
      write(*,*) str2
      read(12,'(a130)') str1
      end if
       end do
       close(12)
       pause
    end program read_1line

青衣巷 发表于 2022-9-20 08:59:16

你要读取的文件是什么样子的?你想要哪一部分?给个范例。

哈哈哈超开心 发表于 2022-9-20 09:19:59

青衣巷 发表于 2022-9-20 08:59
你要读取的文件是什么样子的?你想要哪一部分?给个范例。

以下数据我已经读取第四行字符串就是以‘   #'开头的这一行 ,然后又读了下面的对应的这些科学计数数据,此时我想再读取上面的对应的某一行的以'#'开头的这一行,上面有很多以‘#’开头的行,但是只要读取最近的一行。感谢!

#   4:   30020He3    H-L=   9.9999E+99 DKref:m .
   0, 0, 0 =(n,f) yield sets. If > 0,63-gp fisn CX follows.(    ), REF:
   4 reaction products. If > 0, 63-group reaction cross sections follow:
   #   1:   10010 produced by the following C-X(c   ) REF:   mix   i endf5
1.5987E+049.7420E+037.5774E+036.4077E+035.6500E+035.1110E+034.7014E+034.3204E+033.9529E+033.6479E+03
3.3910E+033.1289E+032.8309E+032.4191E+031.9381E+031.5118E+031.1655E+039.0732E+027.0320E+025.4858E+02

li913 发表于 2022-9-20 09:44:30

character(512) str, line
do i=1,n
read(12,"(a)") str
if(str(1:1)=='#') line=str
if(str(1:8)='   #3215') then
...处理line
end if
end do

哈哈哈超开心 发表于 2022-9-20 10:06:41

li913 发表于 2022-9-20 09:44
character(512) str, line
do i=1,n
read(12,"(a)") str


我去试了,非常可行,受教了!感谢!:-handshake
页: [1]
查看完整版本: 使用backspace语句出现问题