Fortran Coder

查看: 9838|回复: 2
打印 上一主题 下一主题

[文件读写] xyz数据当中最后3列有0的部分不写入,但是其它部分正常写入

[复制链接]

40

帖子

11

主题

0

精华

大宗师

F 币
4252 元
贡献
1857 点

规矩勋章

QQ
跳转到指定楼层
楼主
发表于 2015-11-24 10:57:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如题,我想让最后3列数据中,只要有数字0的就不输入到另一个文件中,比如正文第二行 1  C      6.079287   -0.155411   16.237832    82     2     3     7     0
输入到另一个文件时,变成1  C      6.079287   -0.155411   16.237832    82     2     3     7
我自己尝试编写程序,但是输出的结果变成了遇到后三列为0就不写入文件中了,请教各位如何实现我说的那个功能。

[Fortran] 纯文本查看 复制代码
    Program removezero
    Implicit none
    Integer::i,j
    Character(len=20)::name,name1,name2,name3(2),name4(1)
    Real(kind=kind(0.0d0))::a,b,c
    Integer::d,e,f,g,h,k,ierr
    write(*,*) 'Input the name of xyz:'
    Read(*,*) name
    name1=trim(adjustl(name))//'.xyz'
    name2=trim(adjustl(name))//'1.xyz'
    Open(12,file=name1)
    Open(13,file=name2)

    Do i=1,1 
        read(12,*) name3(1),name3(2)
        write(13,"(2x,a,2x,a)") trim(name3(1)),trim(name3(2))
    End Do

    Do
        read(12,*,iostat=ierr) k,name4(1),a,b,c,d,e,f,g,h
        If(ierr==0) then
            If (f==0 .or. g==0 .or. h==0 ) cycle
            write(13,"(2x,I4,2x,a2,2x,F12.6,f12.6,f12.6,2x,I4,2x,I4,2x,I4,2x,I4,2x,I4)")k,&
            trim(name4(1)),a,b,c,d,e,f,g,h
        End if
        If(ierr/=0) exit
    End Do
    Read(*,*)
    Close(12)
    Close(13)
    End

AB22soakre.xyz

254.56 KB, 下载次数: 1

输入文件

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩
where is dream,where is home

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2015-11-24 12:26:31 | 只看该作者
也许这个代码是你需要的

[Fortran] 纯文本查看 复制代码
Program removezero
  Implicit none
  Character(len=64):: name
  Real(kind=kind(0.0d0))::a(3)
  Integer:: z(5) , k , ierr
  write(*,*) 'Input the name of xyz:'
  Read(*,*) name
  Open(12,file=trim(adjustl(name))//'.xyz')
  Open(13,file=trim(adjustl(name))//'1.xyz')
  read(12,'(a64)') name
  write(13,"(2x,a)") trim(name)
  Do
    read(12,*,iostat=ierr) k,name,a,z
    If(ierr/=0) exit
    write(13,"(2x,i4,2x,a2,2x,3F12.6,5(2x,I4))") &
      k , trim(name) , a , pack(z,z/=0)
  End Do
  Read(*,*)
  Close(12)
  Close(13)
End Program removezero

40

帖子

11

主题

0

精华

大宗师

F 币
4252 元
贡献
1857 点

规矩勋章

QQ
板凳
 楼主| 发表于 2015-11-24 14:30:06 | 只看该作者
fcode 发表于 2015-11-24 12:26
也许这个代码是你需要的

[mw_shl_code=fortran,true]Program removezero

老大,这确实是我所需要的,还是你厉害啊。我在你写的这个代码中,有一项我不太懂,那就是pack(z,z/=0),虽然我也猜到了它的用途,不过它具体的用法和意思是什么?
where is dream,where is home
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-25 00:11

Powered by Tencent X3.4

© 2013-2024 Tencent

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