Fortran77 中的标准输入和命令行文件

Standard Input and Command line file in Fortran77

我接受了将 Fortran 77 程序移植到 C# 的挑战。 我发现 read(5,*) 从标准输入读取,即键盘。

现在我正在尝试了解以下内容的工作原理:

1.当我 运行 程序时,我必须 运行 它作为 cheeseCalc<blue.dat>output.txt ,它读取一个 blue.dat 文件并生成一个 output.txt 文件。在这种情况下读取如何工作?

  1. 在同一个程序中,有READ(5,* )IDUM,后来又有了read(5,*)idum,idum,tinit。这种情况下发生了什么?

blue.dat 文件包含以下几行:

HEAD make new cake 
INPUT VARIABLES 
MFED  MASS-FEED 30            ;1001 1 100 PEOPLE TO FEED 
TOVE  TEMP-IN-OVEN 150.0         ;1001 20 100 TEMPERATURE OF OVEN, C

UPDATED:仅供参考,程序中的初始代码行是:

       program cheeseCalc
       CHARACTER*76 IDENT
       CHARACTER*1 IDUM
       READ(5,104)IDENT
104    FORMAT(4X,A)
       READ(5,*)IDUM
c      write start record
       write(6,102)IDENT
102    format('**START',/,4X,A,/)
       read(5,*)idum,idum,frate
110    format(f10.0)
       frate2=frate/3.6
       read(5,*)idum,idum,tempo
       * Do calculation *
       write(6,*)frate2,tempo
       end

任何帮助将不胜感激!!谢谢!

通用 read 语句的完整细节在其他地方有记录,但这里有一个成语可能值得详细说明。

语句read(5,*) ...是来自外部单元号5的列表定向输入。让我们假设(不能保证,但很可能而且您似乎对您的设置很满意)这个外部单元是标准输入。

惯用的部分是在输入列表中重复使用单个变量,例如

read(5,*) idum, idum, ...

这(以及 idum 是一个(名字很糟糕的)长度为 1 的字符变量这一事实表明用户不关心前两个字段中的输入)。读取由空格分隔的第一个字符串,然后将第一个字符分配给 idum。然后 idum 立即设置为下一个字符串的第一个字符。

这样做的目的是将记录中的位置设置为第三个字段,读入(实)变量frate(第一种情况)

等于

read(5,*) idum

只是跳过第二行(严格来说,读取第一个字符,但在下一次读入 idum 之前未在任何地方使用):读取第一个空白分隔的字段,但下一次读取继续进行到下一行而不是继续那一行。