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'와 '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가 2594가 아니라 2596임을 알았습니다. 각 레코드는 중간에 포기하지 않고 짧다고 생각하십니까? 프로그램 끝에서 읽고 쓰는 레코드 수를 인쇄합니다. –