2015-04-21 13 views
0

guys。我試圖讀取由VAX FORTRAN代碼存儲的科學數據文件。數據存儲在結構中,其中的文件和代碼描述如下。我搜索了FORTRAN 77可能會讀取該文件,但我經常使用的語言不是FORTRAN。那麼有人能告訴我如何將數據讀入FORTRAN或C/IDL /等。變量?例如,結構的N個單元存儲在文件「pxm.mos」中,我如何將數據讀入我的變量? 非常感謝! 以下是描述。如何讀取通過VAX FORTRAN代碼與「地圖」和「聯合」保存的未格式化的數據文件

c  FILE name is "pxm.mos" 
c  FILE AND RECORD STRUCTURE 
c  The files were created with form='unformatted', organization='sequential', 
c  access='sequential', recordtype='fixed', recordsize=512. 
c  The following VAX FORTRAN code specifies the record structure: 

      structure /PXMstruc/ 
       union 
       map 
        integer*4 buffer(512) 
       end map 
       map 
        integer*4 mod16   
        integer*4 mod60   
        integer*4 line    
        integer*4 sct 
        integer*4 mfdsc   
        integer*4 spare(3) 
        real*4 datamin   
        real*4 datamax   
        real*4 data(0:427) 
       end map 
       end union 
      end structure 

      record /PXMstruc/ in 
+0

'structure'是一個VAX Fortran擴展。你可能首先想看看你的當前編譯器是否支持它。 – agentp

回答

2

這並不難。你可以把結構想象成一個C結構,並且有聯合體。每個記錄是2048個字節(以VAX術語爲512個「長字」),由5個32位整數組成,一個3個整數的數組用於填充,兩個32位浮點數,然後是一個428個浮點數組。鑑於該文件是固定長度的,不需要擔心元數據。與「緩衝區」的聯合可以被忽略。

我會更關心文件如何進入您的計算機,假設它源自VMS系統。您需要驗證文件大小是2048字節的精確倍數。最有可能它轉移得很好,所以用正確的佈局聲明一個結構並讀入它,通過記錄進行記錄。

+0

注意對於無格式順序訪問,記錄將以指示記錄大小的(可能)32位整數開始。記錄大小在記錄末尾重複,所以文件大小應該是2048 + 8的倍數。 – agentp

+0

也要注意,您可能需要處理字節排序問題。 – agentp

+1

由於RECORDTYPE ='FIXED',將不會有記錄大小。 VMS是小端的,所以如果你在大端系統上,你需要做字節交換。 –

相關問題