|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! n: o% W' e7 T; \% }3 G7 LMatlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。
2 S- _% \+ z& g$ s* z5 O; u
; v) P' [* W1 h# }' i1、文件的打开与关闭% ?3 a. p8 L1 i7 f" ]
1)打开文件
! L( t; J! m" ]. i* l% w5 _在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
: o4 P; `/ x* t! h+ cfid=fopen(文件名,‘打开方式’), g, S- [7 |7 q8 x' Q
说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:
# O) t* D- r5 u3 a- ?6 c ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
/ T1 o. Z* s# L! o& j ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。
1 `1 ^$ }* b8 t, n( X! c" i ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。2 Q# X! y3 @8 l: F8 X
‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
0 @$ c9 D5 a5 c; J, l3 ^/ p ‘a’:在打开的文件末端添加数据。文件不存在则创建。
+ Z4 o0 u1 V* }+ j$ N ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。7 t) [0 K4 P6 N1 g2 _; s
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
3 E9 R- q/ l: K0 ?. [2)关闭文件
2 ]/ p7 T) W. f4 L+ t! o文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
1 Y" V: a. c# |; V( e3 x! Wsta=fclose(fid)4 p8 c, v6 f! k; I1 P0 n0 Z
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。
& E- q9 w- _+ A* V& Y" `2、二进制文件的读写操作( [6 d% s# q! ^1 M9 ?, [
1)写二进制文件
% N: y) T* D# ~+ ?7 {fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:7 t* T# i$ m" i3 r' Y1 J3 V2 }7 G! J# d
COUNT=fwrite(fid,A,precision)
. y& [+ j+ n# L2 S$ K说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。+ Z+ ~) B3 y( v3 A% r+ s/ p: k
例6.8 将一个二进制矩阵存入磁盘文件中。
% D, i; `% G! Y. s3 |5 r c; Y3 w>> a=[1 2 3 4 5 6 7 8 9];# a4 l0 u' J6 `8 U, E; `
>> fid=fopen('d:\test.bin','wb') %以二进制数据写入方式打开文件
+ U$ z M w7 k& T7 @9 \fid =* V$ R& t& w' {/ R; k7 X
3 %其值大于0,表示打开成功
- b: E1 y! K5 x8 s% P>> fwrite(fid,a,'double')* [; R, j$ q) k' J% j
ans =
7 x0 N1 g9 n7 a7 F 9 %表示写入了9个数据* D R2 t& h4 w) ~ A# }* `
>> fclose(fid)0 D2 F; L5 Z/ |! H% n# U
ans = . f$ m z, `( a6 d2 U
0 %表示关闭成功2 ~; G/ h$ ^$ W2 p* f) |
2)读二进制文件6 ]0 U5 R4 ] M* @+ c4 |( K
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:5 }# \! B% P+ J- ^
[A,COUNT]=fread(fid,size,precision)' u. ]! P5 @2 D7 w$ y
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。
+ E/ m( a+ H0 p- A: t! c* z, ^9 \# p' c: n+ ?
%写一维数据至数据文件, w; X! c2 B: Q3 h9 L& H% i
n=0:pi/10:4*pi;; s4 `7 s. ^8 |& v2 ]
y=sin(n);+ S; a( R! |; Q/ h% z$ d; N. U
fip=fopen('C:\binary3.bin','wb');
, u7 R% o; N& Q ^3 z3 R/ w- k" Yfwrite(fip,Pxx,'double');
' O: P! [/ Z0 \5 Cfclose(fip);
2 Y/ Y7 h/ h1 C; T3 z
1 O! H+ ^$ s; L& x3 U- _" r%从数据文件读取一维数据
7 m. v0 ~0 R% K# A9 Vfip=fopen('C:\binary3.bin','rb');) f, F: w$ J) q. G" D" W
[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
/ D: H/ {3 }) G; V* y/ y4 }%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
3 f$ l4 A3 l: L/ |fclose(fip)
9 M& O+ D9 U/ G6 a3 j; f3 ]# I4 E7 k4 W) ^ d, X! Y5 J8 e
%写二维数据至数据文件3 Y( Y: _1 |) c' L
n=0:pi/10:4*pi;; z2 L9 x0 B* c" Z
y1=sin(n);y2=sin(n);y3=0.5*sin(n);
/ o2 ]% D( c' e* Y$ {* ], Ly=[y1;y2;y3];
9 B$ @7 b/ b; Z+ ]fip=fopen('C:\binary4.bin','wb');& o9 a* z8 w4 K$ V& Z$ E+ V
fwrite(fip,y,'double');
% ^. S: L: C" q4 Gfclose(fip); %返回指针的值为0,则表示存储数据正常% {/ `+ z8 Q- U/ r" P( H: u/ g# J/ S+ l
! d7 U0 G0 D5 R8 a5 s4 @
%从数据文件读取二维数据. J# ^$ e$ K3 e; z7 a9 @
fip=fopen('C:\binary4.bin','rb');' c1 ^% Q3 _2 u
[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示
5 \: E J8 J& h. x$ d8 l6 y. ^ b%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中# }! J% c7 [. |1 |9 ^
fclose(fip)
8 h9 P2 f" x! U1 T1 y |$ ]
2 Q& f. a6 k; v0 @详细的范例如下。
r9 _$ u4 c; s1 i) x6 O
& u9 `0 M& D2 h+ q**************************************************************************************
' C. h0 E M' j' v I# G+ d
0 n2 }: S1 ^. h8 q/ C! g/ u1 b8 l1 U%写一维数据至数据文件3 I9 P, g& k/ H1 s: I' {
n=0:pi/10:4*pi;
4 B- o/ w' O2 G/ w) b: hy=sin(n);
. U/ [( @0 \- D4 o0 Rfip=fopen('C:\binary3.bin','wb');
$ l! _7 d7 K! m& l7 dfwrite(fip,Pxx,'double');
; w# V, e6 f$ U% Y3 ^ M) j8 tfclose(fip);
0 {# ]/ N1 M* `) g) X$ P
9 M5 o9 Q; J# M9 c# m% i6 F%从数据文件读取一维数据1 Q$ w6 U% K1 f& C6 P! D# I
fip=fopen('C:\binary3.bin','rb');4 E, V) O" i- R" C% h1 x
[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
+ h9 {1 C" I6 ^* L2 K7 [) L- c" I3 y将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
4 `5 N! ]- Q- ]& I: f) h8 @fclose(fip)
3 N& ~$ B) [ a* t. T2 I% I
) \( O5 p1 Z! g" |9 a%写二维数据至数据文件
' m6 m" E* U7 i2 qn=0:pi/10:4*pi;
; W, [0 F0 w# xy1=sin(n);y2=sin(n);y3=0.5*sin(n);% R5 a/ H) K4 I0 O6 S- |
y=[y1;y2;y3];
! H; }. o7 `; R1 X" ]2 J' f0 `1 qfip=fopen('C:\binary4.bin','wb');7 c1 C! X/ X2 N
fwrite(fip,y,'double');
; x3 Q/ b4 }! V" sfclose(fip); %返回指针的值为0,则表示存储数据正常
4 q: U- R$ `4 a8 p
+ `) i. ~) S3 k ^6 K- |$ \%从数据文件读取二维数据
4 Z% D; I3 ?* M6 Cfip=fopen('C:\binary4.bin','rb');
, j8 a+ g% Q1 k9 W" T1 G6 s1 ~[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示' W+ d# E7 I, M8 K: g
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
+ B9 g# L2 O/ _fclose(fip)
v& o6 B4 O( y8 L' u& b* u. R7 |! T5 @! g
5 d! h+ \5 Q6 F, O7 V7 j
" c8 t9 p4 D, D3 c
|
|