主题:read语句里的end真的有效么?
GuiltyOne
[专家分:60] 发布于 2012-12-28 13:56:00
顾名思义,read(10,*,end=100)是指当10号文件读完的时候跳转到100行代码出继续执行文件,但是我在使用过程中发现这个效果根本没就没体现出来,例如我的10号文件只有一行数据:abcde,代码为:
read(10,*,end=100)con
write(*,*)con
100 stop
end
理论上来说read读完了con之后就自动跳到100 stop才是,不应该执行write这一步,但是为何实际中还是执行了?请高人赐教
最后更新于:2012-12-28 14:03:00
回复列表 (共6个回复)
沙发
heizaoniangao [专家分:310] 发布于 2012-12-30 11:40:00
有效的。
只是你的代码文件还没有读到末尾,末尾是下一行,也就是第二行。换个意思,就是说如果read里加上iostat=error,当error不等于0,文件到了末尾,读取不成功时候,才转到end语句行。我再加了一句read,程序没有运行write部分。如下
Program abc
implicit none
integer con
open(unit=10,file= "abc.txt" )
read(10,*,end=100)con
read(10,*,end=100)con
write(*,*)con
100 stop
end program abc
板凳
heizaoniangao [专家分:310] 发布于 2012-12-30 11:46:00
有趣的是我写了另外一个,如果换成下面的,假设是abc是空文件,由于加了一个write语句,把数字10写入文件,此时读取的位置正好在第一行行末,这时再用read语句,就直接到了文件末尾,不会运行第二个write语句:
open(unit=10,file='abc.txt')
write(10,*) 10
read(10,*,end=100) con
write(*,*) con
100 stop
论坛的回复真是差劲啊,编辑不了格式,换行统统没有用。。。
3 楼
GuiltyOne [专家分:60] 发布于 2013-01-05 14:05:00
受教良多啊,这么一个小小的问题困扰了我许久,多谢了heizaoniangao 兄
4 楼
GuiltyOne [专家分:60] 发布于 2013-01-05 15:02:00
顺便问一下,第二个例子中read之所以能直接跳到文件末尾,其本质是read和write是一致的,计算机对他俩的认定就如同第一个例子中的双read一般,不知道我这个认识合不合理。。?
5 楼
heizaoniangao [专家分:310] 发布于 2013-01-06 04:04:00
应该这么理解:
因为是顺序读取,无论是write或者read,运行完了之后读取位置会停留在这一行的行末,然后等待向下一行输入或者读入。第一个例子里的第一个read和第二个例子里的第一个write运行完了之后,文件读取的位置就到了第一行的行末,而第二行是没有的,所以再用read是读取不了了,程序认为到了文件末尾,所以转到endlist那一行。
所以两个read和一个write加一个read最后效果是一样的,因为第一个read和第一个write把读取位置都移到了第一行的行末。
6 楼
heizaoniangao [专家分:310] 发布于 2013-01-06 04:06:00
[quote]
受教良多啊,这么一个小小的问题困扰了我许久,多谢了heizaoniangao 兄[/quote]
不客气,对你有帮助就好,而且你这个问题挺有意思的。
我来回复