主题:急救文件处理
yanji0403
[专家分:0] 发布于 2010-03-23 09:55:00
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个回复)
沙发
zhangghost [专家分:40] 发布于 2010-03-23 17:27:00
Open(10,file="")
100 Do
Read(10,err=100,end=150) your_read_list
EndDo
150 Close(10)
板凳
yanji0403 [专家分:0] 发布于 2010-03-24 10:07:00
谢谢zhangghost的回答,小弟刚学fortran不久,弱弱的问下, 怎么才能保证提取的是 ITEM: ATOMS id type x y z 下的数据,把这些数据赋值给数组,能写的在详细些吗?
3 楼
anney169 [专家分:130] 发布于 2010-03-24 10:24:00
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 楼
zhangghost [专家分:40] 发布于 2010-03-24 16:51:00
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 楼
yanji0403 [专家分:0] 发布于 2010-03-24 18:27:00
那有没有办法 遇到ITEM: ATOMS id type x y z 这个字符串就读下面的数据呢?谢谢!
6 楼
yanji0403 [专家分:0] 发布于 2010-03-24 18:30:00
首先非常感谢你的回答,fortran能办到 遇到“ITEM: ATOMS id type x y z”这个字符串就读下面的数据吗?
7 楼
anney169 [专家分:130] 发布于 2010-03-25 11:17:00
在OPEN之后做一个if判断,把"ITEM: ATOMS id type x y z" 赋值给一个字符型参量(25个字符),读取文件中的前(25个字符)赋值给另一个参量,比较两者是否相等,是就接着下面的do循环读取数据,否则就跳出do循环。
8 楼
yanji0403 [专家分:0] 发布于 2010-03-29 16:11:00
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 楼
yanji0403 [专家分:0] 发布于 2010-03-30 10:17:00
兄弟,能具体写一下吗?我还是个初学者,非常感谢
我来回复