0

我有一个 Fortran 代码,它读取带有单独的字符和数字行的 txt 文件,然后将它们写入具有 20 个元素的一维数组中。此代码与 Fortran 77 编译器 Force 2.0.9 不兼容。我的问题是,我们如何使用 Fortran 77 编译器应用 aformenetioned 过程;即定义一维数组,然后将 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         
4

1 回答 1

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”是页面弹出的代码。您更有可能在输出中看到它。请参阅Fortran 控制字符(回车控制)是否仍在编译器中实现?

于 2012-07-27T22:47:15.967 回答