|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
" k+ d* b) k: L6 }文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。6 T9 ]: {+ m0 P _; {
1、文件的打开与关闭
( C& O! T" J, e1)打开文件
. G/ u0 G1 f; `' [" B9 |* v在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
( R- C' |$ j/ B! T/ D; {3 J! N5 Ffid=fopen(文件名,‘打开方式’)) p6 d/ @! K5 \8 U$ w4 f0 h
说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:
; X- w: c% V6 _6 S+ w* W ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。- e" A# v" r9 a3 p1 Q4 A9 u
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。
* n3 L$ U" f! W. I7 s* T) T6 Y ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
& Y* z- Y9 z# L ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
) Y0 W6 [ j$ t ‘a’:在打开的文件末端添加数据。文件不存在则创建。
/ f! Q0 S: f1 V: S% P$ d ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。* I8 B9 n, N0 b# F. K
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
# e' R [# W/ j& R2)关闭文件
) x+ _; r: K) a# c- \& v文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
9 k2 l; P% B* _# xsta=fclose(fid)% [1 Q6 j; q/ t: a
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。
& B* V6 \: m5 y w2、二进制文件的读写操作 u! W/ r6 [9 ^6 I+ ~
1)写二进制文件2 n, x9 X3 n9 U3 ]7 {# [2 M
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:, } a$ V; f7 f+ A4 t4 m
COUNT=fwrite(fid,A,precision)
4 o3 c, [: { N5 Y4 ^6 s说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。6 i2 C' B+ h* E+ O# E6 H7 r
例6.8 将一个二进制矩阵存入磁盘文件中。
8 h) a( w8 Q; @* m1 {>> a=[1 2 3 4 5 6 7 8 9];( _+ C5 g9 s7 x, [2 w" M* T
>> fid=fopen('d:test.bin','wb') %以二进制数据写入方式打开文件
( A" Y8 U* P* `4 G) Tfid =
; q0 W0 E0 I k8 c0 {3 t 3 %其值大于0,表示打开成功
- {/ l& I e+ S>> fwrite(fid,a,'double')
" k0 T# e+ g/ a9 k# {' }" p. `1 yans =
5 R9 s- @* Y/ \3 s 9 %表示写入了9个数据) a8 n% s$ A) F% T! F2 ^
>> fclose(fid)
3 q3 e/ q4 e6 v3 W0 mans = ; {7 S$ N/ c9 n/ g6 l
0 %表示关闭成功
8 _7 [# q( |9 x3 G" _2)读二进制文件
4 @% Y7 b* M+ A1 ^: C: Vfread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:& K1 z: J% M' q
[A,COUNT]=fread(fid,size,precision)
( I% x, V) M) _/ M- ?说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。
- j9 Q9 }5 r: E# I3 R3、文本文件的读写操作
7 e% ?( ]/ \) M. Y R1)读文本文件& Z H# h. J. W: E* j
fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为:
( l9 E% U6 |4 y3 Q1 p4 a/ G( _[A,COUNT]=fscanf(fid,format,size), A. g, j) z# w1 h; C. W: [2 T% I1 D
说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。
) ~& Y4 U' Z, ^0 A2)写文本文件
( f4 i/ @" X2 jfprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:
# |2 Z6 j! m$ g0 q- D gfprintf(fid,format,A)
; {+ w2 _( m7 h: H% d. ^, ?说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。, P( p$ |/ b) c, {1 g6 [& P% K& ^
例6.9 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。
! B' A. \; t& m7 P6 G9 G( E2 O2 o>> a='string';
- l! S; [$ T$ I$ k& t>> fid=fopen('d:char1.txt','w');
6 Z5 ]! P: }$ t/ h R+ l>> fprintf(fid,'%s',a);% Q; M9 H% X! L5 Q) G, X1 i
>> fclose(fid);
2 l5 M- o( p8 T, ]* b5 ]>> fid1=fopen('d:char1.txt','rt');
! C. w1 v$ W' p4 p* O. O>> fid1=fopen('d:char1.txt','rt');' q+ s) f" K% [2 g* i
>> b=fscanf(fid1,'%s')
D9 G0 C$ b2 z7 C' qb =: Z$ } x+ F2 t- M0 [% Q
string6 m; B) x5 f2 {- c
4 H% i3 V( X' f
matlab读txt文件
$ p1 z+ d5 M8 }+ Q& k
+ q2 Y7 m2 }+ s! S0 }4 Xfid=fopen('fx.txt','r');* e; Q3 y( q3 @( S$ x
%得到文件号
" g6 q4 O+ n3 H$ w9 e8 I# L7 c[f,count]=fscanf(fid,'%f %f',[12,90]);
7 I+ M" k4 H' S8 H" _4 _%把文件号1的数据读到f中。其中f是[12 90]的矩阵
3 B I! ]4 J9 ^; s7 _, M/ g%这里'%f %f'表示读取数据的形势,他是按原始数据型读出$ k& R; \; M" X, X- S- _& j, x# _9 S
fclose(fid);
) X* K" x; a% C4 D3 A%关闭文件
5 z- K$ ^5 j& @7 F! c: d另外有的txt文件还可以用load来打开" A* I3 j+ q7 c: o" M) K
其语句为
* w/ B2 `) e) d! ^6 L# V; Ff=load('fx.txt)7 [4 Y6 e0 w( m6 @
我个人觉得用第一种方式较好。因为有些时候,特别是fx.txt 的一行种有多个数据时用load( K9 @, k4 W* E. s5 ]7 T! p
就比较麻烦了 |
|