找回密码
 注册
关于网站域名变更的通知
查看: 497|回复: 1
打印 上一主题 下一主题

如何进行MATLAB的文件读取

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-16 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
$ _6 F: h9 N+ D3 h" ~3 e2 r
文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。( y$ z2 v/ S! |6 P- {
1、文件的打开与关闭
# O( Z0 X  {4 q0 W  S8 R" U, j1)打开文件( }( d1 D' ^9 ^* n7 m3 b
在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为:
5 K, O% M. |1 p* g( wfid=fopen(文件名,‘打开方式’)
; h. s& h9 g$ m+ ]  n* P说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:
) _8 R8 X% O4 [6 d7 r. V& F" [      ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
4 N' v( t1 }9 k! k' ^0 k      ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。- p! j/ Y. I5 h/ o" Z; \
      ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。: ]6 [3 g$ u. i+ q9 q+ f" t
      ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。  d( k- J$ L, q- P$ s- X! @7 ^
      ‘a’:在打开的文件末端添加数据。文件不存在则创建。# }) n3 R* _* Y& p% }  K
      ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。
6 }" x# h' c8 D9 ]. k+ Q另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。7 @0 O( r  }2 M+ i+ F$ k0 Q
2)关闭文件
9 Z! C) a9 e" W* u% a* p文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为:
% j$ L) X1 W% J1 d! L. P2 Jsta=fclose(fid)5 R) z2 ?. c# H# T
说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。( Y0 ]: C; E4 g6 |
2、二进制文件的读写操作
9 a+ f5 _  C( @7 G. _1)写二进制文件
+ [( s& L: m7 x. h; \+ Xfwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
) [: T% V' h! w! q' N" j$ FCOUNT=fwrite(fid,A,precision)+ e/ M& k& p. Y  w8 S
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。+ j$ }) t; ^8 ?- O! `+ U
例6.8 将一个二进制矩阵存入磁盘文件中。
& n- W' F8 `5 o4 i# S  O/ P  B' a  f>> a=[1 2 3 4 5 6 7 8 9];5 u4 F/ c9 ~9 P' x' k, m4 h
>> fid=fopen('d:test.bin','wb')   %以二进制数据写入方式打开文件5 p8 t1 ^9 i6 ]7 C; t. k9 J3 i
fid =
# H7 g* a7 w3 z) M* o1 G* Y  3           %其值大于0,表示打开成功
) ]9 p# s6 |. F& X5 f5 l0 m- i9 D>> fwrite(fid,a,'double')
5 h( p" |2 L* p) j" @( Mans =
! Y  w' L" `. X6 i1 n+ W) _  9           %表示写入了9个数据  h. w/ X* N# R; @' ~7 S. m
>> fclose(fid)
9 }1 m+ D( F2 E/ |* q, Z$ Oans =        4 ?" C- g' E6 g2 r0 Z
  0           %表示关闭成功: u# f$ F9 B! n1 v9 @: n* f* `
2)读二进制文件
8 L- }8 g1 |) g8 A# z; G  R6 Zfread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:
" ?- E$ n; j+ B0 U8 h- U[A,COUNT]=fread(fid,size,precision)7 n/ K; m) I' `, c( l' w9 c- J( S0 q9 @3 z
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。
6 ^6 ^: ?5 b. O- c/ N3、文本文件的读写操作  q& B3 W  x5 a
1)读文本文件
9 {. R7 `+ O/ @" w) _: A' K, `: Ofscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为:* \. e) ^$ [5 q+ X$ q
[A,COUNT]=fscanf(fid,format,size)
4 X2 K' N& r) a- [2 a说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。" Q0 ?: @$ |/ E3 W7 t7 ]' o
2)写文本文件
( y% T1 X$ e9 P% Z. tfprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:/ M1 `2 K: z. U0 A3 N' u0 v/ N
fprintf(fid,format,A)8 H7 u' e0 x6 z% _6 c
说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。
  d$ I! v6 `8 r2 r8 k6 `例6.9 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。) M/ H9 b! c/ {
>> a='string';
; x% _% d+ z# v2 ?; Q8 U+ d5 Z>> fid=fopen('d:char1.txt','w');
5 J: L$ G4 K* f3 S+ j4 O" r>> fprintf(fid,'%s',a);) u) L1 b4 w, m
>> fclose(fid);% V3 M. a9 G! N/ S/ W" \
>> fid1=fopen('d:char1.txt','rt');- }+ _% \) U' Q
>> fid1=fopen('d:char1.txt','rt');
# ?2 b- Y! n% C) z( x1 h>> b=fscanf(fid1,'%s')
- A; E- Y/ u$ ^: eb =
# k' V$ i  b0 h) Dstring
4 e. o0 v8 n# F; u( j! x/ E; D5 |0 K- n& c
matlab读txt文件
: }- M; I; Y/ L. n* A3 u1 i- Z  N& k4 A2 J3 P9 I
fid=fopen('fx.txt','r');
, h( n. u* N6 v- _/ e) q%得到文件号
( l; l, _- @. m  d' b# O[f,count]=fscanf(fid,'%f %f',[12,90]);( B/ h& @, z- t
%把文件号1的数据读到f中。其中f是[12 90]的矩阵, I9 A& J9 r* o6 z
%这里'%f %f'表示读取数据的形势,他是按原始数据型读出0 k/ W. C, v& V2 `& a
fclose(fid);
) s4 o5 b4 Q. w%关闭文件
7 o, ]. [& P; O4 S另外有的txt文件还可以用load来打开
2 I5 c5 s5 z; Z5 r其语句为
' T7 Y' ~% d& j4 u- t" d4 ef=load('fx.txt)) T, O9 ~# w3 ?  C' d% g
我个人觉得用第一种方式较好。因为有些时候,特别是fx.txt 的一行种有多个数据时用load
0 X0 Q; g& v1 b4 J' X$ Q就比较麻烦了
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-3-16 17:00 | 只看该作者
    MATLAB的文件读取
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 02:52 , Processed in 0.140625 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表