|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/ A. D/ T6 X: A" t$ I, D. d: XMatlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。
. q: N. N% _ v9 w1 n
& K$ j! p) J6 C$ f9 R: F3 {# y1、文件的打开与关闭
3 J6 Q. V. P" j: x1)打开文件, L) y- W8 c9 D# d. W6 Y
在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:8 k N/ ]4 `) J% x
fid=fopen(文件名,‘打开方式’)
* |( s: I3 h9 j! z! N说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:$ Q9 w8 i3 K' q& C0 h
‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
7 u, B! J1 z$ H* n4 a, R ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。4 ~! Y% P% w3 t. @
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
+ ~* X }% ]3 ~+ i. K ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
! |8 L- }# s) ?, o) @6 o( E ‘a’:在打开的文件末端添加数据。文件不存在则创建。
3 ^' g) Y" i6 ?" D. _8 S4 ^) c ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。9 v& w' i* G1 k& z- X! T
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。- o4 f T; ^; x' w- ~3 c. K! p
2)关闭文件9 y0 R7 K* j! b# f9 |! i
文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:# v$ O; ~' v! j. M# v
sta=fclose(fid)
. c! y/ L8 Q; c0 G+ F* P说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。
% T! W0 V# y8 f% Q, m% D2 m2、二进制文件的读写操作8 H4 U9 x# z/ b
1)写二进制文件3 z5 p- W' ]- f4 ]8 {4 v4 j
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:& b& t% N# x" c0 w
COUNT=fwrite(fid,A,precision)
o; q# `# Z2 ] [: ]. Y* J: G2 E说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。, E$ `3 g/ S( ]. L
例6.8 将一个二进制矩阵存入磁盘文件中。! A+ M& K( t3 s
>> a=[1 2 3 4 5 6 7 8 9];
; ~( O1 [7 @* X8 w# D# j>> fid=fopen('d:\test.bin','wb') %以二进制数据写入方式打开文件
% A6 `; z2 v9 z0 {. F" I- wfid =$ R% s. }/ D8 b& E2 y5 g
3 %其值大于0,表示打开成功$ l" [# b7 N. h* q6 m q
>> fwrite(fid,a,'double')
7 k) V' A* s+ ~ans =
5 ?3 o: q6 C# S 9 %表示写入了9个数据
: m! Q. O `" y. [! M0 F>> fclose(fid)6 M! u7 @) d# f/ n
ans = 0 t6 s% a$ M6 U% \6 d
0 %表示关闭成功
+ d* W& L8 U" t& C2)读二进制文件- p8 [6 k* s# u; r4 u4 I3 n1 E" \
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:' C; c) H+ q# b/ g% h
[A,COUNT]=fread(fid,size,precision)
0 h: l$ ]! e( d7 F; G: }% Z说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。6 u9 h+ M, k$ |4 t$ a8 S0 ~
" v+ h# S* E n%写一维数据至数据文件
0 s* O! u2 ?. }1 a0 ^n=0:pi/10:4*pi;( _+ g- k8 y5 A) g$ S* q( p% ^
y=sin(n);5 t1 ?5 x- A# w" D3 {& e+ _# `
fip=fopen('C:\binary3.bin','wb');
4 z$ U; y1 I" ]* hfwrite(fip,Pxx,'double');, }9 O3 r/ i" g! n( U
fclose(fip);4 n% {7 P9 m8 K# w# Z9 `
- \4 u3 r9 X4 @( D j: c0 K
%从数据文件读取一维数据, ~/ |2 l2 y" ^& N& k" \
fip=fopen('C:\binary3.bin','rb');
/ T/ o" o/ I) j[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
1 T3 k9 P( A8 r ]%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中8 V$ u/ Y0 `& Q8 H
fclose(fip)+ U2 p4 P9 Z8 N1 s4 H0 t, S4 Y! ~
% P, I( f# J4 K* i/ K# g4 A
%写二维数据至数据文件3 [ ~! a1 z* k& d
n=0:pi/10:4*pi;" z# n* }( v7 Z- U% o1 B* E. g( w
y1=sin(n);y2=sin(n);y3=0.5*sin(n);
/ [& _0 Z' n0 _% ^ ty=[y1;y2;y3];
6 N; Y [. M2 }' t n+ I; T. I2 kfip=fopen('C:\binary4.bin','wb');. m% w) x9 C9 E
fwrite(fip,y,'double');0 s: o1 ?) q d
fclose(fip); %返回指针的值为0,则表示存储数据正常2 I# ~# p7 D0 ]. G! G) D
7 Z; b- w# T( U0 {0 P1 x" s
%从数据文件读取二维数据
% q4 W0 V+ v. J- v, afip=fopen('C:\binary4.bin','rb');
/ w& K+ V# C- A1 f[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示
# q6 k, Y0 b/ P* r3 }%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中& c2 G! ^; u4 C3 `4 E1 j+ W3 U4 ~$ d
fclose(fip)% Y' q+ ^4 m3 u
/ J8 ^5 c# O0 V7 l
详细的范例如下。
- f9 s6 L0 d. p; x( ^ L6 d; i
8 F: c3 L. z1 y0 z! x2 l/ A**************************************************************************************# Q% F& b# T1 r
, G4 @) `% s/ j+ [
%写一维数据至数据文件
2 \1 u1 Y8 r# M1 W$ Pn=0:pi/10:4*pi;
' g# k$ q, F5 J" ]0 I9 By=sin(n);
# ^8 h& b5 v) k4 b; pfip=fopen('C:\binary3.bin','wb');( y* i6 a$ Y8 L h/ h
fwrite(fip,Pxx,'double');* S9 [+ u3 \# r7 X7 O" L% w/ ~8 \
fclose(fip);
$ J% U- g, \! x* A: @/ u+ M
v3 `2 R& \0 f; W, L; T%从数据文件读取一维数据. o) `0 a+ X/ _, y/ }+ n
fip=fopen('C:\binary3.bin','rb');
/ X! q2 O# W0 f: m/ q* X5 C[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
! S+ ~# y M/ @+ n; R1 m将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
* U/ P; r+ I6 A6 z! Ofclose(fip)
1 ]4 l7 ^- w7 n* a( p/ X
# [3 R2 ]" P# t# ~%写二维数据至数据文件
5 }# h0 ?0 w% |0 X. H) m) o1 k% _n=0:pi/10:4*pi;+ J& x3 X. ?; @; w1 I8 B, B, Q
y1=sin(n);y2=sin(n);y3=0.5*sin(n);
1 r. c9 o# I3 G# @: |1 Cy=[y1;y2;y3];4 M. I# D0 U: m$ n* k
fip=fopen('C:\binary4.bin','wb');: h2 E: m- N1 k. G4 h, e
fwrite(fip,y,'double');/ `& W9 ]' M6 K/ v( Z6 d$ }
fclose(fip); %返回指针的值为0,则表示存储数据正常
2 u6 N0 {8 o5 ]
) p \5 V, P! V5 u0 x%从数据文件读取二维数据$ Y0 D* {" ]" B5 T
fip=fopen('C:\binary4.bin','rb');
6 N& D- n5 ~4 z s[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示* m6 B7 @4 [) n2 ~ F7 p
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中! d, K J* l7 U3 k( {8 C
fclose(fip)
9 k# r& h' A( ~# G
4 u8 T- y$ z$ s. \! D* N; i! _0 A" b# G& ]
: W/ U2 s$ d9 z, @ |
|