Fortran Coder

查看: 2301|回复: 4
打印 上一主题 下一主题

[文件读写] 使用backspace语句出现问题

[复制链接]

5

帖子

2

主题

0

精华

新人

F 币
30 元
贡献
12 点
跳转到指定楼层
楼主
发表于 2022-9-20 00:55:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的以下代码的backspace语句用的好像有问题,但不知如何修改,使用前都可以正常读取数据,用了backspace就好像陷入无限循环。我的目的是想在文件里读取到符合条件的str1字符串后,再返回前面某一行,读取到与str1相关的的一行也就是str2字符串(前面有很多符合‘str2(1:1)==‘#’’的行,但是就只取离str1最近的前面某一行)。请大佬赐教!!!
[Fortran] 纯文本查看 复制代码
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

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

81

帖子

0

主题

0

精华

专家

F 币
471 元
贡献
232 点

规矩勋章新人勋章元老勋章

QQ
沙发
发表于 2022-9-20 08:59:16 | 只看该作者
你要读取的文件是什么样子的?你想要哪一部分?给个范例。
彼岸,有永恒的守候...

5

帖子

2

主题

0

精华

新人

F 币
30 元
贡献
12 点
板凳
 楼主| 发表于 2022-9-20 09:19:59 | 只看该作者
青衣巷 发表于 2022-9-20 08:59
你要读取的文件是什么样子的?你想要哪一部分?给个范例。

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

#   4:   30020  He  3    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+04  9.7420E+03  7.5774E+03  6.4077E+03  5.6500E+03  5.1110E+03  4.7014E+03  4.3204E+03  3.9529E+03  3.6479E+03
  3.3910E+03  3.1289E+03  2.8309E+03  2.4191E+03  1.9381E+03  1.5118E+03  1.1655E+03  9.0732E+02  7.0320E+02  5.4858E+02

797

帖子

2

主题

0

精华

大宗师

F 币
3790 元
贡献
2267 点
地板
发表于 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

5

帖子

2

主题

0

精华

新人

F 币
30 元
贡献
12 点
5#
 楼主| 发表于 2022-9-20 10:06:41 | 只看该作者
li913 发表于 2022-9-20 09:44
character(512) str, line
do i=1,n
read(12,"(a)") str

我去试了,非常可行,受教了!感谢!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-25 00:12

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表