fortran77读写文本文档

 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
fortran77代码

并且也不是变量名比较长时就取前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
fortran77
原文地址:https://www.cnblogs.com/zhubinglong/p/8886885.html