使用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
你要读取的文件是什么样子的?你想要哪一部分?给个范例。
以下数据我已经读取第四行字符串就是以‘ #'开头的这一行 ,然后又读了下面的对应的这些科学计数数据,此时我想再读取上面的对应的某一行的以'#'开头的这一行,上面有很多以‘#’开头的行,但是只要读取最近的一行。感谢!
# 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 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 li913 发表于 2022-9-20 09:44
character(512) str, line
do i=1,n
read(12,"(a)") str
我去试了,非常可行,受教了!感谢!:-handshake
页:
[1]