作者kitsune128 (Yan:))
看板Fortran
标题[问题] 撷取档案中某一部分数据的方式
时间Tue Dec 9 01:30:32 2014
初学fortran 只会用简单的计算跟一些回圈
由於现在用软体算出来的output
夹杂英文和数字 想请问
有没有办法用找特定两个关键字的方式
去读在这两个关键字中的数据
再把它写出到另一个资料夹
做了一下功课 好像是需要使用到 index bacspace 跟 do 跳行
orientation:
---------------------------------------------------------------------
Center Atomic Atomic Coordinates (Angstroms)
Number Number Type X Y Z
---------------------------------------------------------------------
1 6 0 2.422098 -0.365891 0.476931
2 8 0 2.669932 -1.186283 1.333641
3 8 0 3.283776 0.059986 -0.453423
4 6 0 4.606155 -0.505397 -0.372798
.
.
.
.
.
.
---------------------------------------------------------------------
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.
.
.
.
.
completed
大致上的数据格式是这样,从orientation 到completer 有大概一千行
一个档案里面有大约40组这样的内容
我想的流程大概是 先寻找到completed
然後使用backspace往上搜寻找到orientation
然後使用跳行读取跳过前面
再来读取 X Y Z 下的数据
然後跳出到找到completed的行数接着寻找completed
但是碍於能力有限具体的方式不太了解
所以想麻烦大家指点一下
谢谢
暂时把CODE整理成这样 但是还是没有办法达成目的
PROGRAM EE
IMPLICIT NONE
CHARACTER(LEN=80) :: TXT
INTEGER :: FIOS,CN,AN,AT
REAL*8 X1,Y1,Z1
OPEN(UNIT=11,FILE="Text3.txt")
OPEN(UNIT=12,FILE="XYZ.TXT")
DO WHILE(.TRUE.)
READ(11,"(A80)",IOSTAT=FIOS) TXT
IF(TXT=="Optimization completed.") THEN
Backspace(11)
Backspace(11)
END IF
DO WHILE(.TRUE.)
READ(11,"(A80)",IOSTAT=FIOS) TXT
IF (LEN_TRIM(TXT)/="Standard orientation:")THEN
Backspace(11)
Backspace(11)
ELSE IF(LEN_TRIM(TXT)=="Standard orientation:") THEN
REWIND(12)
READ(11,*,IOSTAT=FIOS)
READ(11,*,IOSTAT=FIOS)
READ(11,*,IOSTAT=FIOS)
READ(11,*,IOSTAT=FIOS)
DO WHILE(.TRUE.)
READ(11,"(A80)",IOSTAT=FIOS) TXT
IF(TXT=="--------------------------------") EXIT
READ(TXT,*,IOSTAT=FIOS) CN,AN,AT,X1,Y1,Z1
PRINT *, X1,Y1,Z1
WRITE(12,*) X1,Y1,Z1
END DO
END IF
END DO
END DO
STOP
END
还请有看到的大大指点迷津
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.117.58.73
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Fortran/M.1418059835.A.5A9.html
1F:推 kkarthur: 读取一次即可,并不需要用到backspace 12/09 10:24
2F:→ kkarthur: 流程大概如下 12/09 10:24
3F:→ kkarthur: 1. 一行行把档案内容字串存成变数 12/09 10:25
4F:→ kkarthur: 2. IF(内容=="orientation") 就把下面几行座标存起来 12/09 10:26
5F:→ kkarthur: 3.IF(内容=="completed") 就印出成功并显示座标 12/09 10:27
6F:推 kkarthur: 流程2即使前面会因为同样的关键字而变数重复被覆盖 12/09 10:30
7F:→ kkarthur: 但能保证看到completed之前所读取的资料一直是较新的 12/09 10:31
※ 编辑: kitsune128 (140.117.58.73), 12/10/2014 02:43:49
8F:→ weiny1992: TRIM(TXT)才对喔 LEN_TRIM是整数 12/10 18:06