|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
* r3 p; b. ]/ C2 x6 D
文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。+ H. \$ f2 g( b* ]0 `( [* {
1、文件的打开与关闭3 |% |$ D7 o# H0 M9 d
1)打开文件
( _* K7 |, C, |7 j, ^. R( p" E1 X) h在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
/ I7 H9 }; Y7 afid=fopen(文件名,‘打开方式’)% D/ L* Q. x: W! K2 w0 u' r
说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:
' \5 B% z7 t+ D ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。0 M/ c- B- c) N* ?& |
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。( u, ?5 O6 Q9 b: ^5 r* U+ s9 y
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
6 h5 @8 U' D* A4 L2 \3 f4 Z3 z! c ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
l% n7 P0 e, b! e6 |8 h& b ‘a’:在打开的文件末端添加数据。文件不存在则创建。
) V- J5 _- F$ ]5 u6 Q7 _1 P ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。6 V& l7 ~& k$ d- @
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。) F$ A8 d, z% i
2)关闭文件
$ _8 Z2 m9 g9 N文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:1 N# F, E x- q/ _+ B: t
sta=fclose(fid)
7 A9 _8 d9 O3 u6 i" ?, |; Q说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。( k3 M- O, ], R, D0 ~
2、二进制文件的读写操作6 B' J* V2 W5 G$ x5 \5 \
1)写二进制文件0 k/ z$ Y/ s% B( g2 j7 H) P2 f
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
2 G, E# C4 z3 N0 G; j6 |3 b0 e3 nCOUNT=fwrite(fid,A,precision)) _- x* ~- P7 F1 K" L" g
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。
/ b* ~- ]' k* P+ @5 e: h* p0 g% G3 S例6.8 将一个二进制矩阵存入磁盘文件中。
& w9 W- ?5 C o q* ]$ F5 [>> a=[1 2 3 4 5 6 7 8 9];
& A. X$ s( d1 w* p1 t4 F>> fid=fopen('d:test.bin','wb') %以二进制数据写入方式打开文件7 E- ]. ^( b# u i, W$ d
fid =
& F) g- ^; L1 K, I! O! K 3 %其值大于0,表示打开成功
2 V0 ?6 I- o; @5 u>> fwrite(fid,a,'double')& v9 |3 F% A7 j6 h
ans =
% l! B, K! ^' K3 M& Y 9 %表示写入了9个数据
0 S# {) R/ X9 X1 V% f2 Y>> fclose(fid)- k+ f3 G& \ m( e+ V( ]
ans =
' S" |$ _% a* c* V5 d 0 %表示关闭成功. R- a, k1 ], ]2 C Z# J
2)读二进制文件$ X+ S( X& d S: b1 j& j
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:
3 ?* q5 t0 b2 m, T[A,COUNT]=fread(fid,size,precision)' L0 m9 T' _: {5 R
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。3 n. b! v4 s4 S7 Z- ~
3、文本文件的读写操作4 |( [3 L- O% [3 K' H
1)读文本文件: X2 I) _! P" u5 z+ x2 Q3 R
fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为:8 Y' Z6 l$ `5 S3 |0 q9 }
[A,COUNT]=fscanf(fid,format,size)+ H# g! F+ ~1 D* z& b
说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。0 V! C- |& d6 c. f- _, T
2)写文本文件& |& U" p, `5 r9 v
fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:, l6 q8 W3 h( r+ K
fprintf(fid,format,A)
/ X3 T) Y7 o3 v" x3 {9 b说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。
9 k$ R0 j( B- p例6.9 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。 l. H) s$ @* x- L \- ]6 k
>> a='string';
: b4 T- b$ M% a4 M>> fid=fopen('d:char1.txt','w');% r" G( E2 q |8 A6 B
>> fprintf(fid,'%s',a);" s' i- M( e$ d( u: M0 q5 x
>> fclose(fid);$ V9 t: p! \7 U! q
>> fid1=fopen('d:char1.txt','rt');$ Q+ ^6 K/ ~) e% T. c
>> fid1=fopen('d:char1.txt','rt');
: q8 \0 D3 O# l) w>> b=fscanf(fid1,'%s'); U+ z& f* g! \4 |, R
b =0 ]/ _$ ^8 T! m6 W
string1 X2 } h4 _" u
+ ^7 ^( ^3 u2 [5 |matlab读txt文件1 Q3 c9 G* u4 ~- c. c
; Q/ R# P! N3 A3 J: M$ yfid=fopen('fx.txt','r');: r: F0 p) r& [) F5 m
%得到文件号
9 c5 b; p0 z9 w[f,count]=fscanf(fid,'%f %f',[12,90]);- {) {" W' K# }9 W6 g
%把文件号1的数据读到f中。其中f是[12 90]的矩阵% N2 N q- V6 }3 h
%这里'%f %f'表示读取数据的形势,他是按原始数据型读出
2 v3 D$ T/ C- C" X& H9 {fclose(fid);
, k4 V3 Z" _0 k2 D%关闭文件
0 g& ~. L9 o/ b另外有的txt文件还可以用load来打开
6 B/ {+ {& j5 D1 C' |2 t+ I其语句为4 w: f0 k4 n! E
f=load('fx.txt), c9 q; Y9 @1 M3 D. D- Y
我个人觉得用第一种方式较好。因为有些时候,特别是fx.txt 的一行种有多个数据时用load
3 r9 p, A ?) B: K: o* \就比较麻烦了 |
|