MATLAB Answers

Write binary file in Matlab

112 views (last 30 days)
Haoliang Yu
Haoliang Yu on 13 Sep 2019
Commented: Image Analyst on 14 Sep 2019
Hello,
I have a binary data generated by Fortran, I am able to read my data:
fid = fopen('inflow.data0000');
sep1=fread(fid,1,'float');
nynzitime=fread(fid,3,'int32');
sep=fread(fid,1,'int32');
RAW_read = fread(fid, 3*n1*n2,'float32');
RAW = reshape(RAW_read, [n1,n2,3]);
fclose(fid);
I need to make some changes in the data and then write it out as a binary file for Fortran.
so I did this:
fileID = fopen('newinflow.data0000')
fwrite(fileID,sep1,'single');
fwrite(fileID,nynzitime,'int32');
fwrite(fileID,sep,'int32');
fwrite(fileID,RAW_read,'float32');
fclose(fileID);
then when Fortran reads the data:
namel='newinflow.data0000'
open(30,file=namel,form='unformatted')
read(30)n2al,n3l
read(30)qal(0:n2al+1,1:n3l,1:3)
close(30)
error message shows "corrupted file". I realized that it is a header/format related issue, but I am not familar with binary file, tried a few different things, no luck yet.
I attached a 'good' binary data, please see if you know how to read and write it properly for Fortran.
Thank you for your time.

  0 Comments

Sign in to comment.

Answers (2)

James Tursa
James Tursa on 13 Sep 2019
Can you read and write as “STREAM” in your FORTRAN compiler? No header stuff to worry about.

  1 Comment

Haoliang Yu
Haoliang Yu on 13 Sep 2019
Yep, that is something I will do today.

Sign in to comment.


Image Analyst
Image Analyst on 13 Sep 2019
Maybe try changing the ENDIAN?

  4 Comments

Show 1 older comment
Image Analyst
Image Analyst on 13 Sep 2019
Why are you not specifying 'w' or 'r' in your fopen()? Does it somehow figure it out afterwards?
Haoliang Yu
Haoliang Yu on 13 Sep 2019
Oh, I did, but forgot that part when I paste the code here...also I worked around this problem by changing the Fortran write and read code to STREAM.
Image Analyst
Image Analyst on 14 Sep 2019
A paste operation shouldn't drop out characters that were copied into the clipboard. You might want to investigate that.

Sign in to comment.

Sign in to answer this question.