2016-10-24 3 views
1

서식없는 직접 액세스 파일을 작성하는 포트란 코드가 있습니다. -서식없는 직접 액세스 파일 이식성

    • 첫 번째 플랫폼은 윈도우 (2009 주위 버전 인텔 컴파일러를 사용하여 프로그램의 32 비트 버전)입니다 : 문제는 내가 다른 플랫폼으로 전환 할 때 크기와 파일의 내용이 변경이다 두 번째 플랫폼은 Linux (gfortran 컴파일러 v4.9.0을 사용하는 프로그램의 64 비트 버전)입니다.

    불행하게도 Linux에서 생성 된 파일은 창에서 읽을 수 없습니다. LINUX의 파일 크기는 5-6 배 작습니다. 그러나 기록되는 전체 레코드 수는 같아 보입니다. 16 진수 편집기를 사용하여 두 파일을 모두 열었고 주요 차이점은 파일의 Windows 버전에 많은 0이 있다는 것입니다. LINUX에서 정확히 동일한 파일을 생성하는 방법이 있습니까? 도움이된다면

    , 여기에 두 파일을 찾을 수 있습니다 https://www.dropbox.com/sh/erjlf5sps40in0e/AAC4XEi-p4nnTNzhyai_ZCZVa?dl=0

    을 나는 명령을 사용하여 파일을 엽니 다 OPEN(IAST,FILE=ASTFILR,ACCESS='DIRECT',FORM='UNFORMATTED',RECL=80)

    내가 명령을 쓰기 : WRITE(IAST,REC=IRC) (SNGL(PHI(I)-REF), I=IBR,IER)

    내가 명령을 읽어 : READ(IAST,REC=IRC,ERR=999) (PHIS(I), I=1,ISTEP) PHISREAL*4 배열

  • +1

    한 관련 예를 들어 같은 어쩌면, 무엇인지 확실하지 않다 http://stackoverflow.com/questions/8751185/fortran-입니다 unformatted-file-format –

    +0

    최상의 이식성을 위해 스트림 액세스를 사용하는 것이 좋습니다. –

    +0

    버텍을 많이 고맙습니다. 불행히도 나는 그 게시물을 놓쳤습니다. 한가지 더 질문 : 주어진 바이너리 파일에 대해, 기록 된 RECL의 값을 찾을 수 있습니까? – helios21

    답변

    1

    문제는 기본적으로 인텔 포트란은 RECL =이 단어 단위이고 GFortran은 바이트를 사용한다고 지정합니다. 바이트 단위를 사용하는 데 사용할 수있는 인텔 포트란 컴파일러 옵션이 있습니다. 리눅스에 해당 옵션은 Windows 용

    -assume byterecl 
    

    내가 구문이

    /assume:byterecl