Fortran Coder

查看: 8067|回复: 5
打印 上一主题 下一主题

[文件读写] 有规律的文件名,不用许多通道号而将信息读取出

[复制链接]

135

帖子

15

主题

0

精华

版主

F 币
1159 元
贡献
637 点

爱心勋章管理勋章

楼主
发表于 2015-11-18 10:20:44 | 显示全部楼层
看了一下你得程序发现了两个问题:
1.你得程序中没有判断有多少个文件,你在问题表述中说 “有一系列文件要读”,但是你得程序只读一个,且控制参数 “i”(如16行)没有设定输入,或者初始化,一次只能处理一个文件
2.在文件名的处理上,尚未分清楚字符串和变量的关系。
第一个问题是你程序逻辑的问题,请自行修改,而第二个问题的建议性修改如下
[Fortran] 纯文本查看 复制代码
program xyzgjf !xyz转成gjf
    implicit none
    integer::i,j,k,l,base,ierr
    character(len=20)::a(1),b,c,d
    character(len=100)::name,name1,name2
    real(kind=kind(0.0d0))::x,y,z
    b='%chk=name.chk'    
    c='#p B3LYP/6-31G opt '
    d='Title Card Required' !b,c,d 是写在gjf的前几行的
    k=0
    l=1
    base=12
    write(*,*)'Input the name of file:'
    read(*,*) name
    i=3
    if (i>=1) then
        write(name2,*)i
        name1=trim(adjustl(name))//'.xyz_'//trim(adjustl(name2))
        Open(base+i,file=trim(adjustl(name1)))
        name1=trim(adjustl(name))//'.gjf'
        Open(11,file=trim(adjustl(name1)))
    Do j=1,1
        read(base+i,*) 
    End Do
    else 
        name1=trim(adjustl(name))//'.xyz'
        Open(12,file=trim(adjustl(name1))) 
        name1=trim(adjustl(name))//'.gjf'
        Open(11,file=trim(adjustl(name1)))
    Do j=1,1
        read(12,*) 
    End Do
    End If

    write(11,"(a20,/,a20,/,/,a20,/,/,I1,1x,I1 )") b,c,d,k,l
    
    Do
        If (i>=1) then
            Read(base+i,'(8x,a1,2x,f12.6,f12.6,f12.6)',Iostat=ierr) a(1),x,y,z
            If(ierr==0) then
                write(11,'(1x,a,14x,f12.6,2x,f12.6,2x,f12.6)') trim(a(1)),x,y,z
            End If
        else
            Read(12,'(8x,a1,2x,f12.6,f12.6,f12.6)',Iostat=ierr) a(1),x,y,z 
            If(ierr==0) then
                write(11,'(1x,a,14x,f12.6,2x,f12.6,2x,f12.6)') trim(a(1)),x,y,z
            End If
        End If
        If (ierr/=0) exit
    End Do
    Close(11)
    Close(12)
    Close(base+i)
End  
        
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-18 09:46

Powered by Tencent X3.4

© 2013-2024 Tencent

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