|
纯新人一枚,由于科研需要,刚学77不久,在UBUNTU下解析一个由F77写的远古代码,我用CODEBLOCK移植到了WIN平台下,在跟踪代码过程中,一个子程序中读取了一个二进制文件,关于这里READ的用法,我没太搞清楚,希望得到指点。 读入二进制文件是这么写的,如图1所示。关键部分:
OPEN(UNIT=IOPDS,FILE=FILNAM(1:LNFILE),ERR=100, STATUS='UNKNOWN',
& ACCESS='SEQUENTIAL', FORM='UNFORMATTED',IOSTAT=IOS)
ENDIF
READ(UNIT=IOPDS,ERR=300,IOSTAT=IOS) LNOW,(WORK(I),I=1,LNOW) 这个read后面的LNOW是什么类型,因为前面也没有显示声明。。?因为WORK在前面已经申明是WORK(1),那么这里是从二进制文件FILE(INQUIRE存在)中读入全部数据后放到LNOW中,在赋值到WORK(1)中吗? 最重要的是我设断点跟踪的过程中,发现执行完READ后,LNOW等于0(执行前为2000多),WORK为0,参见图2,这是说明二进制文件中的所有数据没有读入进去吗??还是我理解有问题,如果读进去了,为啥我用IDE的WATCH栏看到的是0。
看了论坛上的帖子http://fcode.cn/guide-4-1.html帮助很大,里面是分行读入,我碰到的情况似乎和帖子所讲有出入,这个程序是用一个LNOW把二进制的所有数据都读入了吗?
这个地方的理解,对我后面阅读学习这个程序非常关键,今天整了一天,还是没整明白,明明文件存在,也OPEN了,读进去为啥LNOW是0,不知道我哪里没理解对这个程序的意思. 另外这些代码在UBUNTU下编译跑例子都正常,也就是说这块代码是没问题的。只是放在WIN下我想用CODEBLOCK能够快速阅读,方便快速理解,应该也不会是平台的差异导致的。谢谢大家的帮助和指点。
另外我单独把这个读取部分拿出来用77模仿了下,其中FILENAME具体化,执行前后LNOW和WORK皆为0.
PROGRAM READTXT
LOGICAL EX
DIMENSION WORK(1)
INQUIRE(FILE='FASTLIB',EXIST=EX)
IF(.NOT.EX) THEN
WRITE (*,*) "Hello World!"
RETURN
ELSE
OPEN(UNIT=66,FILE='FASTLIB',
& STATUS='UNKNOWN',
& ACCESS='SEQUENTIAL', FORM='UNFORMATTED', IOSTAT=IOS)
ENDIF
READ (66,IOSTAT=IOS) LNOW,(WORK(I),I=1,LNOW)
FILE文件的二进制和十进制文件我用这个远古程序附带的小工具在LINUX下转换出来了,也一起上传上来。
|
|