看板 Fortran 關於我們 聯絡資訊
初學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://www.ptt.cc/bbs/Fortran/M.1418059835.A.5A9.html
kkarthur: 讀取一次即可,並不需要用到backspace 12/09 10:24
kkarthur: 流程大概如下 12/09 10:24
kkarthur: 1. 一行行把檔案內容字串存成變數 12/09 10:25
kkarthur: 2. IF(內容=="orientation") 就把下面幾行座標存起來 12/09 10:26
kkarthur: 3.IF(內容=="completed") 就印出成功並顯示座標 12/09 10:27
kkarthur: 流程2即使前面會因為同樣的關鍵字而變數重複被覆蓋 12/09 10:30
kkarthur: 但能保證看到completed之前所讀取的資料一直是較新的 12/09 10:31
※ 編輯: kitsune128 (140.117.58.73), 12/10/2014 02:43:49
weiny1992: TRIM(TXT)才對喔 LEN_TRIM是整數 12/10 18:06