我有一个Fortran代码,它读取带有单独字符和数字行的txt文件,然后将它们写入包含20个元素的一维数组中。 此代码与Fortran 77编译器Force 2.0.9不兼容。我的问题是我们如何使用Fortran 77编译器应用aformenetioned过程;即定义一维数组nd然后逐行将txt文件写入数组的元素?
提前谢谢。
txt文件如下:
案例1:
10 0 1 2 0
1.104 1.008 0.6 5.0
25 125.0 175.0 0.7 1000.0
0.60
1 5
高级案例
15 53 0 10 0 1 0 0 1 0 0 0 0
0 0 0 0
0 0 1500.0 0 0 .03
0 0.001 0
0.1 0 0.125 0.08 0.46
0.1 5.0 0.04
@Jason: 我是初学者,还在学习Fortran。我猜Force 2使用g77。 以下是原始代码的对应部分。 Force 2编辑器返回一个空的txt文件。
DIMENSION CARD(20)
CHARACTER*64 FILENAME
DATA XHEND / 4HEND /
OPEN(UNIT=3,FILE='CON')
OPEN(UNIT=4,FILE='CON')
OPEN(UNIT=7,STATUS='SCRATCH')
WRITE(3,9000) 'PLEASE ENTER THE INPUT FILE NAME : '
9000 FORMAT (A)
READ(4,9000) FILENAME
OPEN(UNIT=5,FILE=FILENAME,STATUS='OLD')
WRITE(3,9000) 'PLEASE ENTER THE OUTPUT FILE NAME : '
READ(4,9000) FILENAME
OPEN(UNIT=6,FILE=FILENAME,STATUS='NEW')
FILENAME = '...'
IR = 7
IW = 6
IP = 15
5 REWIND IR
I = 0
2 READ (5,7204,END=10000) CARD
IF (I .EQ. 0 ) WRITE (IW,7000)
7000 FORMAT (1H1 / 10X,15HINPUT DECK ECHO / 10X,15(1H-))
I= I + 1
WRITE (IW,9204) I,CARD
IF (CARD(1) .EQ. XHEND ) GO TO 7020
WRITE (IR,7204) CARD
7204 FORMAT (20A4)
9204 FORMAT (1X,I4,2X,20A4)
GO TO 2
7020 REWIND IR
答案 0 :(得分:4)
看起来CARD被用作保存20个4个字符的字符串。我不认为声明是一个字符变量,只是作为一个数组,所以也许在极旧的FORTRAN样式中,一个非字符变量被用来保存字符?您使用的是20A4格式,因此值必须精确定位在20个4个字符的组中。您必须添加空格,以便将它们对齐成4列的组。
如果你想读取数字,那么将它们读成数字类型并使用列表导向的IO会容易得多:
real values (20)
read (5, *) values
然后您不必担心文件中值的精确定位。
这真是古老的FORTRAN ......甚至是FORTRAN-77之前的风格。我不记得上次看到Hollerith(H)格式了!你是从哪里学到的?
编辑:虽然我喜欢Fortran进行许多编程任务,但我不会使用FORTRAN 66!计算机应该让事情变得更容易......没有理由不得不计算字符。而不是
7000 FORMAT (1H1 / 10X,15HINPUT DECK ECHO / 10X,15(1H-))
您可以使用
7000 FORMAT ( / 10X, "INPUT DECK ECHO" / 10X, 15("-") )
我只能想到使用Hollerith代码的两个理由:不要费心去改变遗留源代码(当前的Fortran编译器可以处理30年前过时的功能!值得注意的是!Fortran源代码永远不会死!) ,或研究计算语言的历史。这个名字是为了纪念一位伟大的计算机先驱,其发明在一年内完成了1890年的美国人口普查,当时的1880年人口普查历时八年:http://en.wikipedia.org/wiki/Herman_Hollerith
我很怀疑你今天会在第一栏中看到“1”进行“运输控制”。我不得不查看“1”是页面弹出的代码。您更有可能在输出中看到它。见Are Fortran control characters (carriage control) still implemented in compilers?