경험상 Fortran 90에서 큰 배열을 출력 파일에 저장하는 가장 좋은 방법은 무엇입니까? 이전에는 큰 배열을 ASCII 텍스트 파일에 쓰려고했습니다. 예를 들어, 내가 (페이지 In Fortran 90, what is a good way to write an array to a text file, row-wise? 하단의 추천 덕분에) 이런 짓을 할 것이다 :이 작동Fortran 90 바이너리에 저장된 데이터를 사람이 읽을 수있는 형식으로 변환
PROGRAM testing1
IMPLICIT NONE
INTEGER :: i, j, k
INTEGER, DIMENSION(4,10) :: a
k=1
DO i=1,4
DO j=1,10
a(i,j)=k
k=k+1
END DO
END DO
OPEN(UNIT=12, FILE="output.txt", ACTION="WRITE", STATUS="REPLACE")
DO i=1,4
DO j=1,10
WRITE(12, "(i2,x)", ADVANCE="NO") a(i,j)
END DO
WRITE(12, *)
END DO
CLOSE(UNIT=12)
END PROGRAM testing1
하지만 In Fortran 90, what is a good way to write an array to a text file, row-wise?에서 맨 위의 답변에 의해 지적, 큰 배열을 작성하는 것은 텍스트 파일 매우 느리며 크기보다 약간 큰 파일을 만듭니다. 포스터 같은 것을 사용하는 대신 포맷되지 않은 포트란 바이너리에 쓰기가 추천 :이 작동하는 것 같다, 그리고 응답 here 약속으로, 실제로 훨씬 더 빠르고 작은 파일 크기 결과
PROGRAM testing2
IMPLICIT NONE
INTEGER :: i, j, k
INTEGER, DIMENSION(4,10) :: a
k=1
DO i=1,4
DO j=1,10
a(i,j)=k
k=k+1
END DO
END DO
OPEN(UNIT=13, FILE="output.dat", ACTION="WRITE", STATUS="REPLACE", &
FORM="UNFORMATTED")
WRITE(13) a
CLOSE(UNIT=13)
END PROGRAM testing2
. 그러나 나중에 Fortran 바이너리에 저장된 데이터 (예 : 위의 output.dat)로 작업하고 그 내용을 분석하려면 어떻게해야합니까? 예를 들어 Microsoft Excel과 같은 프로그램에서 이진 파일에 저장된 배열을 열려면 어떻게해야합니까?
내가 전에 post에서 matlab에 대해 언급했을 때, 그 답은 16 진수 파일로 이진 파일을 열어 거기에서 레코드를 추출했다고 제안했습니다. 그러나 나는 16 진수 술취에 대한 사전 경험이 없기 때문에 나는 깊은 물에 빠져들고있는 것이 불안하다. matlab 게시판 (여기 : http://www.mathworks.com/matlabcentral/answers/12639-advice-on-reading-an-unformatted-fortran-binary-file-into-matlab)에서 fortran 파일을 matlab으로 읽는 것에 대해 물어 보았을 때, 거기에있는 사람은 Fortran 스트림을 사용하는 것이 쉬울 것이라고 제안했습니다. 그러나 Fortran 스트림 (즉, OPEN
명령의 ACCESS="STREAM"
지시문 사용)은 시간과 파일 크기가 위의 첫 번째 예제에서 만든 ASCII 텍스트 파일과 비슷할 가능성이 있습니까?
또는 Fortran 바이너리를 사람이 읽을 수있는 형식으로 자동 읽을 수있는 다른 소프트웨어가 있는지 알고 있습니까? (아니면, 16 진수의 sleuthing이나 Fortran 스트림에 대한 좋은 튜토리얼을 알고 있습니까?)
시간 내 주셔서 대단히 감사합니다.
특히 matlab에 정보를 얻으려고하십니까? 그렇다면 HDF5를 적극 권장합니다. 이것은 당신이 찾고있는 이식 가능한 이식 형식입니다. – matt
감사합니다. 예, matlab에 정보를 얻는 것은 괜찮습니다. 실제로 사람이 읽을 수있는 형식은 훌륭합니다. HDF5를 시작하고 배우는 방법, 특히 Fortran 90에서 이러한 파일을 작성하는 방법 또는 Fortran 바이너리를 HDF5로 변환하는 방법에 대한 제안이 있습니까? – Andrew
당신은 ACCESS = 'DIRECT'를 사용하여 1 레코드를 사용하고 레코드 길이를 배열의 크기로 설정하여 레코드 마커를 피할 수 있습니다. 이렇게하면 파일에 데이터 만 저장되며 그 후에 Matlab에서 이진 파일로 읽을 수 있습니다. – steabert