Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FORTRAN程序产生空白输出。帮助我_Fortran_Fortran90 - Fatal编程技术网

FORTRAN程序产生空白输出。帮助我

FORTRAN程序产生空白输出。帮助我,fortran,fortran90,Fortran,Fortran90,我正在编写一个代码来获取一个输入文件并逐行对其进行更改。我使用了一些分隔符,如“@”和“#”,来分隔行,并对每类行进行不同的更改。当我运行代码时,一切正常,但当我执行它时,它会生成一个空白的.txt文件。这是我的密码。帮帮我 程序转换1 !!DEFINES THE DIFFERENT VARIABLES USED IN CONVERSION1 PROGRAM!! INTEGER :: K, L REAL :: A(5) CHARACTER :: ROW1

我正在编写一个代码来获取一个输入文件并逐行对其进行更改。我使用了一些分隔符,如“@”和“#”,来分隔行,并对每类行进行不同的更改。当我运行代码时,一切正常,但当我执行它时,它会生成一个空白的.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
块程序“其他条件.BLK”


这可能不是问题所在,但根据输入情况,可能会出现下标错误。我建议做出如下改变:

implicit none

integer, parmeter :: max_at_cnt
real, dimension (max_at_cnt) :: A

L=1
Dok=110000
读(1),(A150)’第1行
如果(第1行(1:1)='@'),则

如果(L我建议添加调试输出语句以了解正在执行哪个分支。或者使用调试器。输出文件是零大小还是包含空格?我调试了输出语句,发现我的程序的第一部分甚至没有运行。有人能告诉我声明或第一部分有什么问题吗DO loop?是否要在DO循环K和J中读取文件?数组a可能存在下标边界错误。我建议使用检查数组边界的选项进行编译。是的,我打算在涉及整数K和J的两个循环中读取文件。我刚刚为数组a成功调试了该文件,并意识到我得到了所有的t他用“@”按升序排列,但我得到了所有的5次更新。数组有什么问题并读取了两次?如果你想再次读取相同的行,你必须倒带文件回到开头。
implicit none

integer, parmeter :: max_at_cnt
real, dimension (max_at_cnt) :: A
L=1
DO K=1,10000
   READ(1,'(A150)') ROW1
   IF (ROW1(1:1)=='@') THEN
      if ( L <= max_at_cnt) then
         A(L)= K
         L = L+1
      else
         write (*, *) "Too many @s in the file!"
      end if
   END IF
END DO