|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
% G1 O( k% J* K0 @2 [5 l0 dMatlab中关于二进制数据文件操作所使用的语言是标准的C,有关数据文件的编程方法与LabVIEW类似。
; j7 T$ g+ t- Z1 [' N z1 P0 W
. @' E% b( p# P. c1、文件的打开与关闭
( A0 M9 h; S# [* n" u) U1)打开文件+ o7 M/ r& B4 R- n$ K0 [- m
在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:; R# | Q$ [" [5 t3 Q r; _
fid=fopen(文件名,‘打开方式’)
' M; q$ t, _: a说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:. _- }0 g* {7 u+ V8 i
‘r’:只读方式打开文件(默认的方式),该文件必须已存在。+ G( @. o. K1 d/ T1 |
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。; i8 J& c+ a' ]4 b
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
$ G! p5 x/ \& T7 ~4 u- M1 X0 s ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
" Q c) h3 }% l' B+ D. ~3 k. C ‘a’:在打开的文件末端添加数据。文件不存在则创建。; }; k& m- s: f. [' u
‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。% n1 F6 a' w V1 B: @! \ C- N1 K
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
( Q1 V. D& ^3 r7 f! b2)关闭文件
+ E7 d3 |. p0 |' Y& ]9 k2 N# l文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
4 c- K7 g# j7 @6 d, hsta=fclose(fid)! P% ?$ C- o( t1 x$ ^) `$ ^& q, e2 J
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。
. H% L8 R4 n6 b+ v8 S0 D2、二进制文件的读写操作
3 [7 G+ O: I5 ]1)写二进制文件( W. E1 b# c1 U/ Y# Z8 G" y
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
2 Q6 ^- Z) e& z- gCOUNT=fwrite(fid,A,precision)' ]- Q+ j; s% K
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。. K. o$ S( S1 p, _! {
例6.8 将一个二进制矩阵存入磁盘文件中。
# v5 J3 U( D8 U5 |>> a=[1 2 3 4 5 6 7 8 9];
; b' T7 a2 V# s+ k6 u& A! b>> fid=fopen('d:\test.bin','wb') %以二进制数据写入方式打开文件
' J9 f" d* O+ z/ o+ V' t j1 @8 Z! @fid =5 E& }/ K" M" F* ?! E K; h! C
3 %其值大于0,表示打开成功: V+ Q% R! c( t \3 G
>> fwrite(fid,a,'double')4 }7 _4 J) ~, i- F8 z
ans =
* D$ L7 B) f' z 9 %表示写入了9个数据
5 B2 S# q: r) `; s5 Q. j>> fclose(fid)+ H2 s, e3 ?& s3 ]1 A4 V' X
ans =
9 ^8 }9 p) d2 `$ N1 G$ ^ 0 %表示关闭成功- m# B9 K( ?& p8 |1 `
2)读二进制文件
$ ]: X; Q, | wfread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:5 a! R! {, N2 j6 P) k
[A,COUNT]=fread(fid,size,precision)
3 L) A, _* U4 R- C3 f说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。1 f# u# ] R. q
8 E- ^, q; i- n, _% ~9 @3 \9 ?
%写一维数据至数据文件
$ C6 y w% B$ Qn=0:pi/10:4*pi;
9 U# c3 x+ U: W* ly=sin(n);! r, s8 P) P2 {/ ^
fip=fopen('C:\binary3.bin','wb');
4 Q$ l" f/ B$ j+ j0 {* i2 }% Pfwrite(fip,Pxx,'double');
5 b. T3 q) G1 Bfclose(fip);$ n0 g; k% l1 ]( ^7 }
$ s$ G! n: S2 u7 ], T+ m%从数据文件读取一维数据. o( U" ^% x p# s# r" z/ y. ?# E* [
fip=fopen('C:\binary3.bin','rb');
# e& k- d. O, U1 G7 A[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
2 K" d* j. ?- b% X1 R% X%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中2 E; C3 t9 e% E, C
fclose(fip)) @# W+ K! E1 U# ]* X
. b6 S$ @) g4 b* D3 f* H: x' i8 F
%写二维数据至数据文件4 S& z/ B3 v. F2 b e% `) U+ B- h, R
n=0:pi/10:4*pi;
9 _4 g B3 A2 u" w* U- P9 e& xy1=sin(n);y2=sin(n);y3=0.5*sin(n);
8 @, X* t; `4 l( m2 U6 X+ t! {y=[y1;y2;y3];
# f C! J! W1 }0 Yfip=fopen('C:\binary4.bin','wb');. s0 e1 K1 j, D
fwrite(fip,y,'double');2 E. @; u7 U+ T# {1 O
fclose(fip); %返回指针的值为0,则表示存储数据正常: t4 E, U- t( B% I/ B+ ]# f
' E" X" r- J: B2 O%从数据文件读取二维数据0 L5 f# `5 C/ B$ q2 @, _6 x! ]
fip=fopen('C:\binary4.bin','rb');
3 \: @+ u+ K2 }& v) o[Array_2D,num]=fread(fip,inf,'double');%inf表示读取文件中的所有数据,[M,N]表示: ]7 U9 N- J, e6 O( s
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
1 @: c) b4 Z; yfclose(fip), ~6 T# A6 t9 |
2 u( l! u( h, @8 {0 D- \详细的范例如下。
8 b8 e3 y* H* y! m2 Y, b' d
2 w) Q9 M: p; O) `- V; T& Z**************************************************************************************7 U) ?2 ^, z0 y, W
& i# [ _6 n. L( h4 v
%写一维数据至数据文件
2 \ {) M7 D. u" t# gn=0:pi/10:4*pi;
! w9 f3 D* ?# l! J3 s0 t) p+ \y=sin(n);
4 c; M" {6 e" f/ k; @/ p) Gfip=fopen('C:\binary3.bin','wb');/ \9 S4 ^; I \. {
fwrite(fip,Pxx,'double');5 d! R7 S5 W% p
fclose(fip);' d# m. f, d$ X# I/ T; _
" L% C7 j2 w% e9 U: d%从数据文件读取一维数据1 w9 m2 C3 c4 Z! \
fip=fopen('C:\binary3.bin','rb');* ?' X& W& f5 P
[SIN,num]=fread(fip,[2,20],'double');%inf表示读取文件中的所有数据,[M,N]表示
) p1 w1 ]5 K$ o将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
; q9 ~ s9 c# n- xfclose(fip)6 E c$ [* P q6 v
8 }+ Q- k* I* i9 U% x q/ Q R%写二维数据至数据文件
1 n7 m, r) r' [6 _n=0:pi/10:4*pi;
2 N+ ]" b9 T, H) a4 q) j- gy1=sin(n);y2=sin(n);y3=0.5*sin(n);
# ?5 \' c! f6 ~+ Uy=[y1;y2;y3];
" t) u2 O1 j1 x# z$ r5 L1 Wfip=fopen('C:\binary4.bin','wb');
! h) E; F0 x3 S* Z0 Ffwrite(fip,y,'double');
9 d/ M" P, B; f+ n- |fclose(fip); %返回指针的值为0,则表示存储数据正常/ A' P# z' G+ Z% y* W& i; ~
& ? r2 N6 G. V+ p% r" x, {
%从数据文件读取二维数据- }- k5 | u& w* v0 p) V2 j6 i
fip=fopen('C:\binary4.bin','rb');6 b. D. x! q- i
[Array_2D,num]=fread(fip,[3,41],'double');%inf表示读取文件中的所有数据,[M,N]表示/ l# c3 k3 z) p: w6 K
%将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中- @& k7 t8 y+ L7 [3 c, X9 b( B# G/ m
fclose(fip)
9 r o! b3 W9 @) u
5 I1 m; l0 [. Y# q8 g
% k$ Q: z( G& q! A4 G/ _! \$ X# V1 |0 d# M3 F& S* z
|
|