Fortran中READ的含义

时间:2009-07-14 15:08:14

标签: fortran

READ()在Fortran中做了什么?

例如:

READ(1,82)

6 个答案:

答案 0 :(得分:14)

1是文件句柄,您必须使用正确的打开调用打开它。 82是引用格式的标签,表示如何根据视觉格式报告数据。

        program foo
        implicit none
        integer :: i
        double precision :: a

        write (*,*) 'give me an integer and a float'
        read (*,82) i,a
        write (*,82) i,a
82      format (I4, F8.3)
        end program

在此示例中,程序接受标准输入(其单元号未指定,因此我将*)放入整数和浮点值。格式说整数占据前四列,然后我有一个浮点数,它保留在8列,小数点后面有3位数

如果我现在运行该程序,并且我没有完全遵循这种格式,程序将抱怨并崩溃,因为前4列预计代表一个整数(由于I4格式),并且“5 3 “。不是有效的整数

$ ./a.out 
 give me an integer and a float
5 3.5
At line 7 of file test.f (Unit 5)
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Fortran runtime error: Bad value during integer read

然而,正确的规格(请注意数字5之前的三个空格)将执行正确的操作(稍微宽容, 严格)

$ ./a.out 
 give me an integer and a float
   5 3.5
   5   3.500
$ 

答案 1 :(得分:6)

它根据标签82处的FORMAT语句从“unit”(打开的文件)编号1读取。但是由于该语句没有列出任何变量,因此它无法放置它正在读取的数据,这不太可能救命; READ(1,82) FOOBAR会更有用地将其读取的数据放入变量FOOBAR中。

答案 2 :(得分:3)

你可以用fortran“阅读”声明做更多的事情。

考虑:     read(unit#,format,options)... generic

read (7,*,end=10)

其中,“7”是读取的单位编号,“*”是格式(在这种情况下是默认值),“10”是程序控制在读取的设备/文件到达时跳转到的行号。 EOF。 “选项”插槽可以填充诸如“err ='行号以转到'”或iostat,advance =“no”之类的内容。您可以查看some more of these

格式部分是您可以更精确地指定所需数据格式的地方。例如,如果您有一个格式说明符,如:

read (25,"(2X, 2I5, F7.3, A)")

这里,“2X”表示2个空格,“2I5”表示2个5位数的整数,“F7.3”表示一个十进制值,总长度为7,有三个小数点后的数字。 “A”指的是一个角色。您可以查看更多these

干杯!

答案 3 :(得分:1)

“1”用于在fortran中打开文件的单位,“82”指定读取命令的格式。

open(1,file=fname,status='unknown')
read(1,82) var_name
82 format(2I5)

上面的代码打开一个名为“fname”的文件,读取命令从文件fname读取,因为它以单元“1”打开,读取命令以格式82指定的格式读取。有关fortran格式的详细信息如下:

nim (Integer Specification)
nfm.d (Floating point Specification)
nEm.d(Exponential Specification)
nAm (string specification)

where
"m" is the number of character spaces reserved for printing. (should be more than what you are reading otherwise read statement would not give correct results)
"n" is the number of integers, floating point, characters or exponential numbers that you want to read.
"d" are the number of decimal places up to which you want to read.

答案 4 :(得分:0)

它使用编号为82的语句指定的格式从单元1读取。

答案 5 :(得分:0)

当Fortran从文件中读取时,它要求READ语句唯一标识文件。使用Fortran单元标识符完成标识。

单位标识符可以是以下之一:

1)整数变量或表达式,其值大于或等于0.

2)只允许在READ和WRITE语句中使用星号(*)。在READ语句中,星号是指单元100(标准输入)。

单位号码最好使用newunit

提供
open(newunit=i,file='test')

使用INQUIRE语句在使用之前检查任何单元号的有效性(存在),如下例所示:

logical :: idok, fop 
inquire (unit=i, exist=idok, opened=fop)
if (idok .and. .not. fop) then
  open (unit = i, ...)
endif

然后我们有FORMAT语句,这是一个带标签的语句,可以出现在程序的任何可见格式部分中。

形式为

READ(*,100) I, J, K

FORMAT声明

100 FORMAT(I10,I10,I10)

略有不同的FORMAT语句是

100 FORMAT(3I10.8)

再次产生三个右对齐的宽度为10的INTEGER,但这次要求至少打印8位数。