コンパイラ頼みでもいいけれども

気になったのは次のコードですねー.

program MatrixOut
 implicit none
 real(8), dimension(2,2,2) :: target
 integer :: i, j, k

 open(10,file='test.dat',form='formatted',status='unknown')
 do i = 1,2
   do j = 1,2
     do k = 1,2
       target(i,j,k)=i+j+k
     end do
   end do
 end do

  print *, "matrix =",target
  write(10,*) target
end program MatrixOut

で,まぁtargetの中身をiから順に展開してファイルに書き出す,と.(意図は分かるんですけどね)
これをgfortranで実行すると次の標準出力とファイルが出来ます.
標準出力

matrix = 3.00000000000000 4.00000000000000 4.00000000000000 5.00000000000000 4.00000000000000 5.00000000000000 5.00000000000000 6.00000000000000

でファイルは1行のファイルができ,(次がtest.datの中身)

3.00000000000000 4.00000000000000 4.00000000000000 5.00000000000000 4.00000000000000 5.00000000000000 5.00000000000000 6.00000000000000

こうなります.で,まぁこれ自体は上手く書き出せてるしいいのかな,と思ったりしますが,これを読み出すコードとして,

program MatrixRead
 implicit none
 real(8), dimension(2,2,2) :: target

 open(10,file='test.dat',form='unformatted',status='unknown')
 read(10) target

 print *, "matrix =",target
end program MatrixRead




じっさいgfortranでコンパイルし,ランしてみると標準出力では次が得られます.

matrix = 1.398043286095289E-076 6.013470018393741E-154 1.398040670813049E-076 1.398043286095289E-076 6.013470018393741E-154 1.398040670813049E-076 1.398043286095289E-076 6.013470018393741E-154

はい,全く読み込めてません.

書き出す方もコンパイラをifortranに変えた瞬間,書き出しが改行されて使えなくなったので,こんな手法は使わない方が良いように思います.

でも次のようにちゃんと書式を合わせて書くと支障なく読めるし手法としてはいいのかなぁ,うーん…

program MatrixRead
 implicit none
 real(8), dimension(2,2,2) :: target

 open(10,file='test.dat',form='formatted',status='unknown')
 read(10,*) target

 print *, "matrix =",target
end program MatrixRead