Fortran77 中的标准输入和命令行文件
Standard Input and Command line file in Fortran77
我接受了将 Fortran 77 程序移植到 C# 的挑战。
我发现 read(5,*) 从标准输入读取,即键盘。
现在我正在尝试了解以下内容的工作原理:
1.当我 运行 程序时,我必须 运行 它作为 cheeseCalc<blue.dat>output.txt
,它读取一个 blue.dat 文件并生成一个 output.txt 文件。在这种情况下读取如何工作?
- 在同一个程序中,有
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
之前未在任何地方使用):读取第一个空白分隔的字段,但下一次读取继续进行到下一行而不是继续那一行。
我接受了将 Fortran 77 程序移植到 C# 的挑战。 我发现 read(5,*) 从标准输入读取,即键盘。
现在我正在尝试了解以下内容的工作原理:
1.当我 运行 程序时,我必须 运行 它作为 cheeseCalc<blue.dat>output.txt
,它读取一个 blue.dat 文件并生成一个 output.txt 文件。在这种情况下读取如何工作?
- 在同一个程序中,有
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
之前未在任何地方使用):读取第一个空白分隔的字段,但下一次读取继续进行到下一行而不是继续那一行。