入力ファイルを取得して行ごとに変更するコードを書いています(ROWS)。「@」や「#」などの区切り文字を使用して行を区切り、行の各カテゴリにさまざまな変更を加えています。コードを実行するとすべて問題ありませんが、実行すると空白の .txt ファイルが生成されます。これが私のコードです。助けて。
プログラム変換1
!!DEFINES THE DIFFERENT VARIABLES USED IN CONVERSION1 PROGRAM!!
INTEGER :: K, L
REAL :: A(5)
CHARACTER :: ROW1
!!INCLUDES THE BLOCK TO CONTINUE BUILDING ON THE VALUE OF J(LINE NUMBERS)!!
INCLUDE 'OTHER_CONDITIONS.BLK'
!!OPENS EXISTING FILE TO BE READ AND THEN PROGRAM WRITES IT TO 2ND MODIFIED FILE!!
OPEN(UNIT=1, FILE='C:\MSDEV\Projects\UUDF_Conversion\BXK__96B.TXT')
OPEN(UNIT=2, FILE='C:\MSDEV\Projects\UUDF_Conversion\BXK__96B_MODIFIED.TXT')
!!TO OBTAIN AN ARRAY OF LINE NUMBERS WHERE A NEW CATEGORY STARTS, SYMBOLIZED BY '@'!!
L=1
DO K=1,10000
READ(1,'(A150)') ROW1
IF (ROW1(1:1)=='@') THEN
A(L)= K
L = L+1
ENDIF
ENDDO
CONTINUE
PRINT(*,*) ROW, ROW1
!!DO LOOP GOES THROUGH EACH AND EVERY LINE OF THE DOCUMENT CHECKING FOR CONDITIONS MET IN ORDER TO MANIPULATE!!
DO J=1,10000
READ(1,'(A150)') ROW
!!AIRPORT DATA!!
IF ((J==2) .AND. (ROW(73:73).NE. ' ') .AND. (ROW(80:80).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:75) // ROW(78:150)
ELSEIF ((J==5) .AND. (ROW(8:8).NE. ' ') .AND. (ROW(15:15).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:10) // ROW(13:150)
ELSEIF ((J==6) .AND. (ROW(27:27).NE. ' ') .AND. (ROW(34:34).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:29) // ROW(32:150)
ELSEIF ((J==7) .AND. (ROW(18:18).NE. ' ') .AND. (ROW(25:25).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:20) // ROW(23:150)
!!RUNWAY DATA BEFORE THE FIRST '#'!!
ELSEIF ((J==(A(1)+1)) .AND. (ROW(17:17).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:12) // ROW(15:150)
ELSEIF ((J==(A(1)+2)) .AND. (ROW(11:11).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:6) // ROW(9:150)
ELSEIF ((J==(A(1)+3)) .AND. (ROW(17:17).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:12) // ROW(15:150)
ELSEIF ((J==(A(1)+4)) .AND. (ROW(25:25).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:20) // ROW(23:150)
ELSEIF ((J==(A(1)+5)) .AND. (ROW(31:31).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:26) // ROW(29:150)
ELSEIF ((J.GT.(A(1)+6)) .AND. (ROW(1:1).NE.'@') .OR. (ROW(1:1).NE.'#')) THEN
WRITE(2, '(A)') ROW(1:39) // ROW(42:150)
ELSEIF ((J.GT.A(1)) .AND. (J.LT.A(2)) .AND. (ROW(1:1)=='#')) THEN
CALL RUNWAY_DATA
!!NAVIGATIONAL AID DATA!!
ELSEIF ((J==(A(2)+1)) .AND. (ROW(101:101).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:96) // ROW(99:150)
WRITE(2, '(A)') ROW(1:26) // ROW(35:150)
WRITE(2, '(A)') ROW(1:71) // ROW(74:150)
ELSEIF ((J==(A(3)-1)) .AND. (J=='#')) THEN
WRITE(2, '(A)') '@'
!!OBSTRUCTION 1!!
ELSEIF ((J.GT.A(3)) .AND. (ROW(129:129).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:124) // ROW(127:150)
!!OBSTRUCTION 2!!
ELSEIF ((J.GE.A(4)) .AND. (ROW(108:108).EQ.'|')) THEN
WRITE(2, '(A)') ROW(1:103) // ROW(106:150)
!!IF ALL ELSE FAILS!!
ELSE
WRITE(2, '(A)') ROW
ENDIF
END DO
CONTINUE
END
!!SUBROUTINE RUNWAY_DATA TO MANIPULATE DATA AFTER THE '@' IN RUNWAY DATA SECTION AFTER A '#'!!
SUBROUTINE RUNWAY_DATA
!!REDEFINES EXISTING VARIABLES FROM MAIN PROGRAM!!
INCLUDE 'OTHER_CONDITIONS.BLK'
!!USES THE EXISTING LINE NUMBER FROM MAIN PROGRAM TO PROCEED ON AND CHECK LINE BY LINE FOR CONDITIONS MET WITHIN 2 '#'S'!!
J=J+1
IF (ROW(17:17).EQ.'|') THEN
WRITE(2, '(A)') ROW(1:12) // ROW(15:150)
ENDIF
J=J+1
IF (ROW(11:11).EQ.'|') THEN
WRITE(2, '(A)') ROW(1:6) // ROW(9:150)
ENDIF
J=J+1
IF (ROW(17:17).EQ.'|') THEN
WRITE(2, '(A)') ROW(1:12) // ROW(15:150)
ENDIF
J=J+1
IF (ROW(25:25).EQ.'|') THEN
WRITE(2, '(A)') ROW(1:20) // ROW(23:150)
ENDIF
J=J+1
IF (ROW(31:31).EQ.'|') THEN
WRITE(2, '(A)') ROW(1:26) // ROW(29:150)
ENDIF
J=J+1
IF ((ROW(1:1).NE.'@') .OR.(ROW(1:1).NE.'#')) THEN
WRITE(2, '(A)') ROW(1:39) // ROW(42:150)
ENDIF
J=J+1
IF ((ROW(1:1).EQ.'#') .OR. (ROW(1:1).EQ.'@')) THEN
STOP
ENDIF
RETURN
END SUBROUTINE RUNWAY_DATA
ブロックプログラム「OTHER_CONDITIONS.BLK」
COMMON /INDEX_POSITION/ J
INTEGER J
COMMON /LINE/ ROW
CHARACTER ROW