1 PROGRAM WRITETEXT 2 IMPLICIT NONE 3 INTEGER,PARAMETER :: NE=6!fortran90 语法定义变量 4 DOUBLE PRECISION A(6,6),B(6,6) 5 INTEGER I,J,M 6 C 非二进制读写文本文档 7 DO 10 I=1,NE 8 DO 10 J=1,NE 9 A(I,J)=I+J 10 10 CONTINUE 11 OPEN(6,FILE='State.txt',STATUS='UNKNOWN') 12 WRITE(6,100) ((A(I,J),J=1,6),I=1,6)!写入txt 13 CLOSE(6) 14 OPEN(6,FILE='State.txt',status='OLD',ACCESS='SEQUENTIAL') 15 100 FORMAT(6(E16.9,1X)) 16 C 读取text中数据到数组 17 I=0 18 15 I=I+1 19 READ(6,200) (B(I,J),J=1,6) 20 IF (I.LT.6) GOTO 15 21 200 FORMAT(6(E16.9,1X)) 22 c 二进制方法读写文档 23 24 ENDPROGRAM WRITETEXT
下面添加二进制形式。
1 PROGRAM WRITETEXT 2 IMPLICIT NONE 3 INTEGER,PARAMETER :: NE=6!fortran90 语法定义变量 4 DOUBLE PRECISION A(6,6),B(6,6),C(6,6) 5 INTEGER I,J,M 6 CCCCC 非二进制读写文本文档 7 C 初始化A 8 DO 10 I=1,NE 9 DO 10 J=1,NE 10 A(I,J)=I+J 11 10 CONTINUE 12 C 将A写入文档6 13 OPEN(6,FILE='State.txt',STATUS='UNKNOWN')!往文本文档中写东西时最好用这种,若存在会自动删除 14 WRITE(6,100) ((A(I,J),J=1,6),I=1,6)!写入txt 15 !CLOSE(6)!其实可以不关闭而由内存直接写到硬盘上。 16 !OPEN(6,FILE='State.txt',status='OLD',ACCESS='SEQUENTIAL')!如果不进行关闭再打开动作,文件指针在最后一行,就需要REWIND 6语句 17 100 FORMAT(6(E16.9,1X)) 18 C 读取text 6中数据到数组B,实现了数据A--->B 19 I=0 20 15 I=I+1 21 REWIND 6!将6号文档的指针移到文档开头 22 READ(6,200) (B(I,J),J=1,6) 23 IF (I.LT.6) GOTO 15 24 200 FORMAT(6(E16.9,1X)) 25 c 下面二进制方法读写文档,实现数据A--->C 26 OPEN(1,FILE='FTEMP1.DAT',STATUS='NEW',ACCESS='SEQUENTIAL', 27 + FORM='UNFORMATTED') 28 WRITE(1) ((A(I,J),J=1,6),I=1,6)!写入txt 29 REWIND 1!将1号文档的指针移到文档开头 30 READ(1) ((C(I,J),J=1,6),I=1,6)!写入txt 31 CLOSE(6) 32 CLOSE(1,STATUS='DELETE') 33 ENDPROGRAM WRITETEXT
通过下面的代码可以看出,现在的编译器可以很好的兼容Fortran77和Fortran90,在Fortran77中写Fortran90代码也没问题,比如变量名字长度可以超过6个字符长度(但要小于31个字符长度)
1 PROGRAM WRITETEXT 2 IMPLICIT NONE 3 INTEGER,PARAMETER :: NE=6!fortran90 语法定义变量 4 DOUBLE PRECISION A(6,6),B(6,6),C(6,6) 5 INTEGER I,J,M,abcdefghijklmnopqrstuvwxyz!名字的长度不能超过 31个字符。 6 CCCCC 非二进制读写文本文档 7 C 初始化A 8 DO 10 abcdefghijklmnopqrstuvwxyz=1,NE 9 DO 10 J=1,NE 10 A(abcdefghijklmnopqrstuvwxyz,J)=abcdefghijklmnopqrstuvwxyz+J 11 10 CONTINUE 12 C 将A写入文档6 13 OPEN(6,FILE='State.txt',STATUS='UNKNOWN')!往文本文档中写东西时最好用这种,若存在会自动删除 14 WRITE(6,100) ((A(I,J),J=1,6),I=1,6)!写入txt 15 !CLOSE(6)!其实可以不关闭而由内存直接写到硬盘上。 16 !OPEN(6,FILE='State.txt',status='OLD',ACCESS='SEQUENTIAL')!如果不进行关闭再打开动作,文件指针在最后一行,就需要REWIND 6语句 17 100 FORMAT(6(E16.9,1X)) 18 C 读取text 6中数据到数组B,实现了数据A--->B 19 I=0 20 15 I=I+1 21 REWIND 6!将6号文档的指针移到文档开头 22 READ(6,200) (B(I,J),J=1,6) 23 IF (I.LT.6) GOTO 15 24 200 FORMAT(6(E16.9,1X)) 25 c 下面二进制方法读写文档,实现数据A--->C 26 OPEN(1,FILE='FTEMP1.DAT',STATUS='NEW',ACCESS='SEQUENTIAL', 27 + FORM='UNFORMATTED') 28 WRITE(1) ((A(I,J),J=1,6),I=1,6)!写入txt 29 REWIND 1!将1号文档的指针移到文档开头 30 READ(1) ((C(I,J),J=1,6),I=1,6)!写入txt 31 CLOSE(6) 32 CLOSE(1,STATUS='DELETE') 33 ENDPROGRAM WRITETEXT
并且也不是变量名比较长时就取前6个字符(要是只取前6个字符的话两个较长的变量名前6个字符相同时会认为是同一个变量),而是全部字符都作为变量名。
1 PROGRAM WRITETEXT 2 IMPLICIT NONE 3 INTEGER,PARAMETER :: NE=6!fortran90 语法定义变量 4 DOUBLE PRECISION A(6,6),B(6,6),C(6,6) 5 INTEGER I,J,M,abcdefghijklmnopqrstuvwxyz,abcdefghijklmnopqrstuvw!名字的长度不能超过 31个字符。 6 CCCCC 非二进制读写文本文档 7 C 初始化A 8 DO 10 abcdefghijklmnopqrstuvwxyz=1,NE 9 DO 10 abcdefghijklmnopqrstuvw=1,NE 10 A(abcdefghijklmnopqrstuvwxyz,abcdefghijklmnopqrstuvw)= 11 & abcdefghijklmnopqrstuvwxyz+abcdefghijklmnopqrstuvw 12 10 CONTINUE 13 C 将A写入文档6 14 OPEN(6,FILE='State.txt',STATUS='UNKNOWN')!往文本文档中写东西时最好用这种,若存在会自动删除 15 WRITE(6,100) ((A(I,J),J=1,6),I=1,6)!写入txt 16 !CLOSE(6)!其实可以不关闭而由内存直接写到硬盘上。 17 !OPEN(6,FILE='State.txt',status='OLD',ACCESS='SEQUENTIAL')!如果不进行关闭再打开动作,文件指针在最后一行,就需要REWIND 6语句 18 100 FORMAT(6(E16.9,1X)) 19 C 读取text 6中数据到数组B,实现了数据A--->B 20 I=0 21 15 I=I+1 22 REWIND 6!将6号文档的指针移到文档开头 23 READ(6,200) (B(I,J),J=1,6) 24 IF (I.LT.6) GOTO 15 25 200 FORMAT(6(E16.9,1X)) 26 c 下面二进制方法读写文档,实现数据A--->C 27 OPEN(1,FILE='FTEMP1.DAT',STATUS='NEW',ACCESS='SEQUENTIAL', 28 + FORM='UNFORMATTED') 29 WRITE(1) ((A(I,J),J=1,6),I=1,6)!写入txt 30 REWIND 1!将1号文档的指针移到文档开头 31 READ(1) ((C(I,J),J=1,6),I=1,6)!写入txt 32 CLOSE(6) 33 CLOSE(1,STATUS='DELETE') 34 ENDPROGRAM WRITETEXT