|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
6 Z0 K8 r0 V2 bMatlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。
4 C0 P3 Y. b# b' m' @. _9 N! M/ y: I- \4 T1 t
1、文件的打开与关闭
9 g1 ~& v- B" v# ^$ q/ ~1 v1)打开文件
" x$ k s% b4 r" S. H9 u7 ]在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
/ R s& T2 F! mfid=fopen(文件名,‘打开方式’)
/ ^: F' p, X% Y4 ^说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:
4 h0 @( E1 Q% L7 x: L! N ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。- @7 Z3 M8 X$ m k7 K; V4 K5 }/ \
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。, Z6 X* ^ ?, g k2 j
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
; S: _. o/ j/ I7 B ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。/ B' q/ H3 C# l8 q( o3 {
‘a’:在打开的文件末端添加数据。文件不存在则创建。0 z7 z2 N( @$ o. c# c
‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。6 K8 | |7 Q& ^8 g3 q& N. I, [2 [
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。+ W0 x; z0 i P0 v4 d
2)关闭文件/ G0 z5 F- B. o+ a
文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:1 T$ N7 X5 k, g( d7 f
sta=fclose(fid)% \4 z9 v [' B; `
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。8 l! w* p" @( G2 \% J6 I* j
2、二进制文件的读写操作
/ r/ R9 ~3 y* J' Q1)写二进制文件+ h" c1 c( Z; j3 l. Y1 c2 O
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
* w/ t/ K* [( Z; LCOUNT=fwrite(fid,A,precision)
: S7 F$ \/ j$ H7 F0 E8 ^说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。1 X" p, U% t8 S* J5 M1 v
例6.8 将一个二进制矩阵存入磁盘文件中。6 J3 l4 L; g+ i" d
>> a=[1 2 3 4 5 6 7 8 9];. y% w/ }- e: H+ ~% B) u
>> fid=fopen('d:\test.bin','wb') %以二进制数据写入方式打开文件
! A) \! R! `& m. `) C; y+ t" ?fid =
0 o0 V' r y T! P 3 %其值大于0,表示打开成功
; y3 | T2 { r' P: k( m>> fwrite(fid,a,'double')$ z7 n" T1 h/ t0 B) H% V
ans =
; n/ t, V/ j0 x* z( w1 I 9 %表示写入了9个数据. a& ]) f! ]* X$ w
>> fclose(fid)* `6 z) e5 x" L' Q
ans = ; o9 |6 ~7 E0 Q1 }9 P# u
0 %表示关闭成功( \3 f: s: m5 m
2)读二进制文件
1 f" U% q5 B H/ a5 ofread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:2 A) I0 K- c" \; e: _4 D
[A,COUNT]=fread(fid,size,precision)" A$ { T) p7 {" `
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。
0 I' t' Z" R T# j! i4 o5 s$ c* Q* T5 e# d! Z6 R
%写一维数据至数据文件0 C: J5 Y2 ?( u; Z; Y9 e- k# B
n=0:pi/10:4*pi;* e! `0 h4 F6 @- J( `$ N% _& r6 A
y=sin(n);- I, }7 H t) l$ m, b8 }- Z# H. l, p
fip=fopen('C:\binary3.bin','wb');
- K. }& A0 ^7 `7 I/ qfwrite(fip,Pxx,'double');
" w; i3 D# l% Z* pfclose(fip);4 k$ A' R. \3 }1 u0 b, l
+ O, Q T7 |. d%从数据文件读取一维数据
1 w$ H& E7 f) \# |0 \fip=fopen('C:\binary3.bin','rb');
! k" \3 t8 j; q& F) r* Y' M[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示. b& }$ P; }% E" D
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中1 I4 D$ _5 B9 ]; g" P+ F
fclose(fip)& q) V7 c; _& c4 y! T" Q
, D S1 x M0 Q0 x: W
%写二维数据至数据文件
2 L& L: n' T2 H7 {: U( Dn=0:pi/10:4*pi;
K [: R7 c! m* M' ]/ N- ~5 Wy1=sin(n);y2=sin(n);y3=0.5*sin(n);. v% p+ `- w$ U: L2 S5 |1 v
y=[y1;y2;y3];# M, h3 p; [3 T4 I% W: k+ K+ M2 @
fip=fopen('C:\binary4.bin','wb');
a- C; x( d/ d5 V4 `9 afwrite(fip,y,'double');
c& @: F `. P. h* x3 V5 ufclose(fip); %返回指针的值为0,则表示存储数据正常! \- F7 `' G$ _. u( O8 E
7 B% \0 ^+ t' D8 @1 W%从数据文件读取二维数据! c5 Y* T) D$ \; Z+ P* ~! G. f' F
fip=fopen('C:\binary4.bin','rb'); w" M* D- T! s( K
[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示$ i+ R* K5 |( |
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中1 d4 s! S8 R T X' c% Z5 V: W
fclose(fip)
5 a/ v- y& D9 f8 F/ k& ]' {$ \! l; g9 U9 A3 F( x6 O3 T
详细的范例如下。$ }3 m& U$ Z0 z2 e/ ~3 s
$ D+ I/ d O: R
**************************************************************************************
T4 {- o5 m6 c4 y! _
. n) O3 ?8 V! w S/ K8 L" h%写一维数据至数据文件1 A" M% }# _. V/ Y7 w1 T
n=0:pi/10:4*pi;4 S" e6 D2 E2 \/ w( @) J5 j
y=sin(n);2 L* I& b( I' Y
fip=fopen('C:\binary3.bin','wb');
, _& H y, T2 Lfwrite(fip,Pxx,'double');3 { l. Y% J c* [ h6 t* P
fclose(fip);
% K2 D1 Q' C" v0 V, C; I% R& x2 M( k1 p% I5 g# N; j
%从数据文件读取一维数据3 @0 [$ [ R1 Y# |* j
fip=fopen('C:\binary3.bin','rb');
% [; `9 N8 C. \+ g[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示: y: l- K* V. E
将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中9 r; J) A* F1 C# T8 a% K5 V
fclose(fip) R# u7 L0 ]% u# C2 `0 q
4 q, _4 U6 C' |7 k' `6 ^8 w$ t6 A' ^%写二维数据至数据文件6 Y4 L3 L* h e
n=0:pi/10:4*pi;9 t! [/ B8 n2 g+ \2 o6 x" q9 {) H
y1=sin(n);y2=sin(n);y3=0.5*sin(n);2 e+ {. }& u3 P) a
y=[y1;y2;y3];9 d' R; @$ ?4 s& p
fip=fopen('C:\binary4.bin','wb');
2 f: f& d9 t* k, efwrite(fip,y,'double');
) V4 L" v0 t" m/ s; Pfclose(fip); %返回指针的值为0,则表示存储数据正常- W4 Y* f: C: G, B+ k
, E& M: J4 v* P
%从数据文件读取二维数据
+ W' x$ A- N N+ Ffip=fopen('C:\binary4.bin','rb');
$ e- `3 ?0 Q7 G0 c7 E$ C[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示$ a# ^9 K8 J) ?: Y
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中4 x/ x8 R" o4 D
fclose(fip)
/ E$ S! B8 ?! [3 q$ @0 z" f! @
5 ^, H1 G! i$ V6 Z/ J' t. ]3 e; c: b" c
7 s4 Z/ |7 l2 e1 ^+ l/ n5 R5 G |
|