fortran中输出不换行
(2013-11-10 12:57:21)
http://blog.sciencenet.cn/blog-47991-411109.html
还有 在论坛 看到郭爱智老师 写的
fortran输出不换行
如何在fortran中读写文件时不换行?这是个极简单又极复杂的问题,简单到只要一个字符,复杂到翻破了好几本语法书也没找见。fortran中默认一条read或者write结束之后就换一行,但是读和写还有些不太一样。
读文件时,read之后如果写了一个数组,就像这样:
read(10,*)Y(1:n)
整整一行数就全都读到数组里了。但是如果用write,写到文件中却不是这个样子,会给你一个超级长的文件然后每行只有一个数。有一个选项叫ADVANCE='YES'/'NO',可以控制输入输出语句完了之后要不要换行,默认是'YES',很不幸,在intel的fortran中这个选项只对read起作用,write依旧不行。
在fortran的输入输出中,"/"表示换行,那么"\"表示什么意思呢,就是“不换行”。这是我在网上逛了老半天才看到的,为了防止忘记,写到博客里面,立此存照。
下面是一段fortran代码样例,要处理的数据20个数就会换一行,一般来讲最后一行是不满20个数的,需要用个同余判断一下
PROGRAM MAIN
IMPLICIT NONE
INTEGER I,J,NY,A,B
REAL X,Y(60),Z(60)
OPEN(UNIT=10,FILE='SX-RIVER.TXT')
OPEN(UNIT=11,FILE='SX-OUTPUT.TXT')
DO I=1,9
READ(10,*)
END DO
DO I=1,372
!!!!!!!!! DATA INPUT !!!!!!!!!!!!!!!!
READ(10,"(18X,I2,1X,F7.3)")NY,X
CALL MOD(20,NY,A,B)
DO J=1,A
READ(10,"(20(1X,F7.2))")Y(20*(J-1)+1:20*J)
END DO
DO J=1,B
READ(10,"(1X,F7.2)",ADVANCE='NO')Y(20*A+J)
END DO
READ(10,*)
DO J=1,A
READ(10,"(20(1X,F7.2))")Z(20*(J-1)+1:20*J)
END DO
DO J=1,B
READ(10,"(1X,F7.2)",ADVANCE='NO')Z(20*A+J)
END DO
READ(10,*)
!!!!!!!!! DATA OUTPUT !!!!!!!!!!!!!!!
!WRITE(11,"(I4,1X,F7.3)")NY,X
WRITE(11,"(1X,F7.2,\)")Y(1:NY)
WRITE(11,*)
WRITE(11,"(1X,F7.2,\)")Z(1:NY)
WRITE(11,*)
END DO
CLOSE(10)
CLOSE(11)
STOP
END PROGRAM MAIN
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! SUBROUTINE FOR CONGRUENCE(TONGYU) !
! Y=A*X+B !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE MOD(X,Y,A,B)
IMPLICIT NONE
INTEGER X,Y,A,B,TMP
A=1
TMP=X
DO WHILE(Y.GT.TMP)
A=A+1
TMP=TMP+X
END DO
A=A-1
B=X-(TMP-Y)
RETURN
END SUBROUTINE MOD
前一篇:Fortran 格式化输出矩阵

加载中…