MATLAB Answers

0

Write binary file in Matlab

Asked by Haoliang Yu on 13 Sep 2019
Latest activity Commented on by Image Analyst
on 14 Sep 2019 at 1:36
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.

2 Answers

回答者: James Tursa
2019 年 9 月 13 日

Can you read and write as “STREAM” in your FORTRAN compiler? No header stuff to worry about.

  1 Comment

Haoliang Yu 2019 年 9 月 13 日 12:10
Yep, that is something I will do today.

Sign in to comment.


Answer by Image Analyst
on 13 Sep 2019

Maybe try changing the ENDIAN?

  4 Comments

Show 1 older comment
Image Analyst
2019 年 9 月 13 日 22:19
Why are you not specifying 'w' or 'r' in your fopen()? Does it somehow figure it out afterwards?
Haoliang Yu 2019 年 9 月 13 日 22:29
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
2019 年 9 月 14 日 1:36
A paste operation shouldn't drop out characters that were copied into the clipboard. You might want to investigate that.

Sign in to comment.