【发布时间】:2014-07-23 01:21:54
【问题描述】:
编辑:我只是提出一个关于 Fortran 的问题,并将开始一个关于转换为 MATLAB 的新问题。
原文:
我正在做一个项目,并试图将一些旧的 Fortran 代码移植到 Matlab 中。我几乎没有 Fortran 经验,所以我不太确定以下代码中发生了什么。 Fortran 代码只是用于解释二进制文件中的数据,我在将内容移植到 MATLAB 方面取得了一些不错的进展,但在以下部分卡住了:
IMPLICIT NONE
DOUBLE PRECISION SCALE
CHARACTER*72 BLINE
CHARACTER*72 DATA_FILE_FULL_NAME
CHARACTER*6 DATA_FILE_NAME
CHARACTER*4 CH4, CH4F
REAL*4 RL4
EQUIVALENCE (RL4,CH4)
CHARACTER*2 C2
LOGICAL LFLAG
c2='69'
LFLAG=.TRUE.
DATA_FILE_FULL_NAME='./'//DATA_FILE_NAME//'.DAT'
OPEN(UNIT=20, FILE=DATA_FILE_FULL_NAME, ACCESS='DIRECT',
. RECL=72, status='OLD')
READ(20,REC=1) BLINE
CH4f=BLINE(7:10)
call flip(4,lflag,ch4f,ch4)
SCALE=RL4
RETURN
END
c ..................................................
subroutine flip(n,lflag,ch1,ch2)
c ..................................................
integer*4 n, i
character*(*) ch1, ch2
logical lflag
if(lflag) then
do i=1,n
ch2(i:i)=ch1(n-i+1:n-i+1)
enddo
else
ch2=ch1
endif
return
end
我所坚持的是获得SCALE 的正确值,因为我不确定RL4 发生了什么。有人可以向我解释一下为什么 RL4 会改变价值以及什么过程会改变它,以便我可以将这个过程放入 MATLAB 中吗?
【问题讨论】:
-
RL4似乎不应该从您的代码中更改其值。它似乎实际上是未定义的。 -
我也是这么想的@VladimirF;但是它确实发生了变化,并且显然给出了正确的答案,因为这是许多不同人使用的代码的摘录。
-
可能不是完整的摘录。
-
啊,我刚刚在某些时候发现了这一点,在代码
EQUIVALENCE (RL4,CH4)中调用了以下代码。我已将此行添加到代码中。 -
我完全怀疑这一点。
标签: matlab fortran binaryfiles