作者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/m.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