回 帖 发 新 帖 刷新版面

主题:急救文件处理

ITEM: BOX BOUNDS                                            
-0.0821485 49.0281                                          
-0.0821485 49.0281                                          
-15 67                                                      
ITEM: ATOMS id type x y z                                   
1586 1 6.48048 3.69877 -10.7853                             
1587 1 5.50828 2.37501 -11.4744                             
4146 1 3.04137 9.13152 -14.8948                             
……
ITEM: ATOMS id type x y z                                   
1596 1 5.48048 3.69877 -10.7853                             
1487 1 5.50828 2.37501 -11.4744                             
4146 1 3.04137 9.13152 -14.8948                             
……
我想提出每个 ITEM: ATOMS id type x y z 的数据赋给数组,文件里面 ITEM: ATOMS id type x y z   下的   数据行和列是相等的,怎么编程,急救,谢谢。我还想知道怎么用fortran判断读取文件结束。                  

回复列表 (共9个回复)

沙发

    Open(10,file="")
100    Do
        Read(10,err=100,end=150) your_read_list 
    EndDo
150    Close(10)

板凳


谢谢zhangghost的回答,小弟刚学fortran不久,弱弱的问下,  怎么才能保证提取的是 ITEM: ATOMS id type x y z  下的数据,把这些数据赋值给数组,能写的在详细些吗?

3 楼

read之后再write出来就可以知道了,e.g.
假设你的文件名是ITEM.dat,文件总共有n行
         
         integer,parameter :: n
         integer :: atom,id
         real :: ix,iy,iz
         dimension :: ix(n),iy(n),iz(n),atom(n),id(n)
        
         open(unit=10,file='ITEM.dat')
         open(unit=6,file='out.dat')

         do i = 1,n
            read(10,*) atom(i),id(i),ix(i),iy(i),iz(i)
            write(6,*) atom(i),id(i),ix(i),iy(i),iz(i)
         end do
         
         close(10)
         close(6)


   这样你就可以在文件out.dat 中查看读入是否正确,write中“*”的格式可以自己定义,read中就最好不要,如果你不知道这些数据是以什么格式写入的话。

4 楼

Open(10,file="")
100    Do
        Read(10,err=100,end=150) ATOMS,id,type,x,y,z
    EndDo
150    Close(10)
如果每行没有读到六个数,则err,返回100,如果读到文件结尾,则end=150,返回到150行继续读。
这样就保证了只读含有数据ATOMS id type x y z的行,而不是这个格式的行将不读取。

5 楼


那有没有办法 遇到ITEM: ATOMS id type x y z 这个字符串就读下面的数据呢?谢谢!

6 楼

首先非常感谢你的回答,fortran能办到 遇到“ITEM: ATOMS id type x y z”这个字符串就读下面的数据吗?

7 楼

在OPEN之后做一个if判断,把"ITEM: ATOMS id type x y z" 赋值给一个字符型参量(25个字符),读取文件中的前(25个字符)赋值给另一个参量,比较两者是否相等,是就接着下面的do循环读取数据,否则就跳出do循环。

8 楼


program ex
implicit none

integer,parameter :: a=20
         integer :: atom,id,i
         real :: ix,iy,iz
         dimension :: ix(a),iy(a),iz(a),atom(a),id(a)
        
         open(unit=10,file='atommole.txt')
         open(unit=6,file='out.dat')

         do i = 1,a
            read(10,*) atom(i),id(i),ix(i),iy(i),iz(i)
            write(6,*) atom(i),id(i),ix(i),iy(i),iz(i)
         end do
         
         close(10)
         close(6)
请问调试上面程序出现Error: Syntax error, found END-OF-FILE when expecting one of: <LABEL> <END-OF-STATEMENT> ; BLOCK BLOCKDATA PROGRAM TYPE COMPLEX BYTE CHARACTER ...
         close(6)是什么原因,谢谢

9 楼

兄弟,能具体写一下吗?我还是个初学者,非常感谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册