[英]Data reading in Fortran
編輯:我使這只是有關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?
該代碼可能確實改變了字節序 -字節交換。 equivalence
意味着等價的變量共享內存,並且可以將從文件讀取的4個字節視為字節交換后的數字。
因此,這四個字節被解釋為四個字節的實數RL4
然后轉換為double precision
值scale
。
僅當邏輯lflag
為true時才進行字節交換。 當文件的字節順序與計算機本機字節順序不同時,可能就是這種情況。
在Matlab中,您可以使用http://www.mathworks.com/help/matlab/ref/swapbytes.html 。
只需讀取4個字節的浮點數並在必要時交換字節即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.