0

FORTRAN 77 を使用してドキュメント内のすべての行をループし、特定の行位置を文字列と比較してから編集しようとしています。

例えば:

|BXK   |00640.3A  |AWP |1.01|
|BUCKEYE MUNICIPAL AIRPORT                                             |08794|

087942 行目のtoを変更したい0871994

これは私がこれまでに持っているものです:

       PROGRAM CONVERSION
    IMPLICIT NONE
    CHARACTER(LEN=120) :: ROW
    CHARACTER(LEN=2) :: DATE1='19', DATE2='20'
    INTEGER :: DATENUMBER
    INTEGER :: J

    OPEN(UNIT=1, FILE='BXK__96B.TXT', STATUS ='OLD')
    OPEN(UNIT=2, FILE='BXK__96B_MODIFIED.TXT', STATUS='UKNOWN')

    DO J=1,10000
    READ(1,'(A)') ROW
        IF (J==2) THEN
            DATENUMBER = ICHAR(ROW(76))
            IF ((DATENUMBER.LE.9) .AND. (DATENUMBER.GE.2)) THEN
                WRITE(2, '(A)' ROW(1:75), DATE1, ROW(76:120))
            ELSE 
                WRITE(2, '(A)' ROW(1:75), DATE2, ROW(76:120))
            ENDIF
        END IF
    END DO
    CONTINUE
    CLOSE(1)
    CLOSE(2)

    END
4

1 に答える 1

0

ああ、つまり、2 行目の右端にある 2 桁の年の表現を 4 桁の表現に変換したいということです。年の最初の桁、つまり 76 の位置を見つける方法をすでに理解しているようです。あなたが書いたものよりもむしろ簡単です

integer :: year
.
.
.
read(line(76:77),'(i2)') year  ! this reads year from the characters in positions 76,77
if (20<=year.and.year<=90) then  ! not sure if this precisely your test
   year = year+1900
else
   year = year+2000
end if

write(line(76:79),'(i4)') year

これをあなたのコードの残りの部分に統合するという面倒なことはしていません。もっと助けを求めなければ、それは簡単です。

実際には、2 行目から年を読み始める列を見つける方法をおそらく理解していないと思います。正確にこれを行う方法は、ファイルの実際の形式によって異なります。慣れる必要がある関数は、コメントの 1 つが教えてくれるようにINDEX、 とSCANです。

行 2の 2 番目の出現の後の 4 番目の文字を探している場合は、次の|ようにすることができます。

integer :: posn_of_2nd_vertical_bar
.
.
.
posn_of_2nd_vertical_bar = scan(row(scan(row,'|')+1:),'|')

次に、定数76を次のように置き換えますposn_of_2nd_vertical_bar+4

于 2012-08-01T10:40:20.740 に答える