Fortran Coder

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

[文件读写] 读取文件最后一行的数字

[复制链接]

22

帖子

6

主题

0

精华

入门

F 币
98 元
贡献
65 点
跳转到指定楼层
楼主
发表于 2020-3-21 11:47:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
program test
    implicit none
    integer:: error,count=0
    character(len=512) str
    
    open(12,file="NLIST.txt")
   do
    read(12,'(a512)',iostat=error)str
    if(error/=0)exit
    
    if(index(str,"NODE")>0)then
        read(12,'(a512)',iostat=error)str
        if(error/=0)exit
        COUNT=COUNT+1
        
    end if
    end do
    close(12)
    write(*,*)count    end program





各位老师好,我有这样一个问题:1*我想读取如图所示文件的NODE数,也就是最后一行的第一个数字,然后配置数组把NODE节点信息放进数组里。
我这样想,先定位到NODE那一行,然后开始读下面的行,每读一行计数一次,累加在一起就得到了有几个NODE,程序是这样写的。但程序的结果是2。不知道思路对不对。接下来再配置数组,可是我卡在了第一步。

QQ截图20200321113341.png (51.46 KB, 下载次数: 245)

QQ截图20200321113341.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2020-3-21 12:21:24 | 只看该作者
你这样做的话
if(index(str,"NODE")>0)then
就会判断到
LIST ALL SELECTED NODES. DSYS= 0
这一行,而不是你期望的
NODE X Y Z THXY THYZ  THZX
这一行

试试改为
str=adjustl(str)
if(index(str,"NODE")==1)then

22

帖子

6

主题

0

精华

入门

F 币
98 元
贡献
65 点
板凳
 楼主| 发表于 2020-3-21 13:00:32 | 只看该作者
老师换成了你说的
str=adjustl(str)
if(index(str,"NODE")==1)then
还是不对,结果是1,我要读的是以NODE开头那行下面有数字的4行,程序的正确结果应该是4才对。我的意思是从数字1那行开始计数,读一行加1,读到第四行就是4。

然后我又想了这个方法:
[Fortran] 纯文本查看 复制代码
program test
    implicit none
    integer:: error,count=0
    character,parameter::nodes="NODE"
    character(len=512) str
    
    open(12,file="NLIST.txt")
   do
    read(12,'(a512)',iostat=error)str
    if(error/=0)exit
    
     str=adjustl(str)
    if(str(:len(nodes))==nodes)then
        read(12,'(a512)',iostat=error)str
        if(error/=0)exit
        COUNT=COUNT+1
    end if
    end do
    close(12)
    write(*,*)count
    end program

结果还是1,

综上,所以我觉得问题是定位到了以NODE开头哪一行后,程序接下来的命令是不是只读了一行?根本就没有读到以数字4开头哪一行.所以结果才是1的。是不是这个问题?

NLIST.txt

466 Bytes, 下载次数: 3

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2020-3-21 14:13:13 | 只看该作者
if(str(:len(nodes))==nodes)then
下面你还得循环啊。

22

帖子

6

主题

0

精华

入门

F 币
98 元
贡献
65 点
5#
 楼主| 发表于 2020-3-21 14:15:30 | 只看该作者
我解决了,是程序的问题,谢谢答复,又学到了,加油
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-23 22:30

Powered by Tencent X3.4

© 2013-2024 Tencent

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