私はFortranでバイナリを読み込もうとしています。ファイルはc#で作成されます。FortranはC#のバイナリファイルを読み込みます
string binfile = @"c:\..\bindata.dat";
int nrecs = 60*60*24*61;
int nvalues = 34;
using (BinaryWriter bw = new BinaryWriter(File.Open(binfile, FileMode.Create)))
{
bw.Write(nrecs);
bw.Write(nValues);
}
データを読み取るためのFortranコード:それだけ格納(作成されたファイルのサイズは8バイトであるので、私が想定4バイト)の整数する以下の私の例で
program TestFortran
implicit none
! Variables
character(*),parameter :: fn = "bindata.dat"
integer :: numMeas,numVals
integer :: infile,ios
character(len=11) :: acc, seq, frm
character(len=128) :: nam
logical :: ex,op
integer :: irec, nr,p
! Body of TestFortran
print *, 'Hello World'
infile = 10
open(unit = infile,file = fn,status='OLD',access='STREAM',FORM='UNFORMATTED',action='READ',iostat=ios)
inquire(infile,err=99,exist=ex,opened=op,name=nam,access=acc,&
sequential= seq, form = frm, recl=irec, nextrec=nr,pos=p)
read(infile,IOSTAT=ios) numMeas
read(infile,IOSTAT=ios) numVals
99 close(infile)
write(*,'(a,i8,a,i6)') "Number of measurements = ", numMeas, ", and number of values in a measurement = ", numVals
end program TestFortran
open
とinquire
コマンドが問題なく実行されます。デバッグモードでは、open
ios
が0で、inquire
acc = 'STREAM'、ex = .true。、frm = 'UNFORMATTED'、irec = -1、namはファイルのフルパス、nr = 0 、op = .true。、p = 1、seq = 'YES'。同じ
私は最初のリード文IOS = -1のものに設定されていないファイルの終わりとnumMeasを示す実行し、2
は誰もがここで間違っているかを知っているんREAD文のために行きますか?すべてのヒントは非常に高く評価されています。私はヒントを検索しようとしましたが、間違っていることを見つけ出すことに成功していませんでした...
Fortranのコードは私に似ています。整数を明示的に 'integer(int32)'に設定しようとする可能性がありますが、おそらくデフォルトの整数は既にそうです。 –
私はまずファイルを書いて、それをfortranで読み直そうとします。正しいパスがあることは確かですか? – agentp