加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有