我試圖將在OpenVMS上創建的一些索引文件轉換爲在Windows或Linux中使用的純平順序文件。 每個索引的文件中包含的從OpenVMS轉換/壓扁RMS索引文件
我已經轉換使用一個簡單的程序的文件,如本POD結構(2594個字節)的x數量:
PROGRAM MAKE_FLAT
BYTE byte_array(2594)
PARAMETER FILE_IN = 1
PARAMETER FILE_OUT = 2
OPEN(UNIT=FILE_IN, fmt='UNFORMATTED',
1 FILE='input.data',
1 ORGANIZATION='INDEXED',
1 ACCESS='SEQUENTIAL',
1 KEY=(1:8:INTEGER), RECL=649)
OPEN(UNIT=FILE_OUT, fmt='UNFORMATTED',
1 FILE='output.data')
DO WHILE (.TRUE.)
READ(FILE_IN, END=999) byte_array
WRITE(FILE_OUT) byte_array
END DO
999 CONTINUE
CLOSE(FILE_IN)
CLOSE(FILE_OUT)
END
如果有1000所記錄的文件中,並且我應該期待一個文件,該文件是 〜1000個* 2594個字節,而是它導致1000個* 2044字節表明,使用:
DIR/FULL output.data
爲什麼該程序編寫每個記錄較少的字節?我做錯什麼了嗎?
編輯: 使用OpenVMS的內置工具給我預期的平面文件。
ANAL/RMS/FDL FILE.FDL input.data
EDIT/FDL/ANALY=FILE.FDL FILE.FDL
從「INDEXED」到「SEQUENTIAL」和鄰接的爲「YES」,執行以下命令給我正確大小的平面文件改變後的組織(包括每個記錄填充)。
CONVERT/FDL=FILE.FDL input.data output.data
爲什麼標記爲C++? –
不應該明確輸入RECL。這些值在編譯器之間不兼容。應該使用「查詢」。請參閱http://stackoverflow.com/questions/32686720/reading-writing-fortran-direct-access-unformatted-files-with-different-compilers –
我注意到649 * 4是2596而不是2594.另外,是什麼讓你認爲每個記錄都很短,而不是你放棄了一半?我會打印在程序結束時讀取/寫入的記錄數。 –