簡體   English   中英

在Fortran中讀取數據

[英]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 precisionscale

僅當邏輯lflag為true時才進行字節交換。 當文件的字節順序與計算機本機字節順序不同時,可能就是這種情況。

在Matlab中,您可以使用http://www.mathworks.com/help/matlab/ref/swapbytes.html

只需讀取4個字節的浮點數並在必要時交換字節即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM