EDA365电子论坛网

标题: 大神总结的matlab文件读取相关操作 [打印本页]

作者: thinkfunny    时间: 2020-3-16 09:31
标题: 大神总结的matlab文件读取相关操作

" {1 T  w$ p2 R6 Z. u# jmatlab的文件操作函数常常会用到,比如load/save,importdata,xlsread/xlswrite等,但是对不同的文件,不同的函数便利性是不一样的。对于专用的文件,专门的函数是最方便的,比如excel文件,用xlsread/xlswrite是最方便的。而对于最常用的txt文件,有几个常用函数需要在不同环境下使用才能效率最高。看了help里的Importing Text Data Files,做个小结吧!
8 l2 }8 O5 m/ `- Z4 G* F' a' |2 |导入数据最方便的就是UI接口了,即Import Wizard,File > Import Data可打开,如果在脚本里,为了加快处理,可以使用importdata代替,但是它有如下限制,数据要呈矩形存储,便于放入矩阵中,对于非字符,如果是作为文件头描述是可以的,否则不能用此函数;
' x5 L1 D2 `1 G) v: c7 K
+ J# u! d* h  [! A1 J在以上条件不满足的情况下可以使用textscan函数更灵活的读取;4 o! X! h& U( q8 J* }& Q. W9 y
8 O5 o3 X8 _: C+ Y6 M# Z+ J
如果textscan仍不足以满足要求,就只能使用底层的I/O函数了。
, a+ U2 H0 _4 N0 H2 Y
0 c0 A* Q, s% \+ E2 N另外,如果想从矩形存储的文件中读取一部分,可以使用dlmread,如  w" t, t, z) y$ \
; x- ~& P: R! m; r
ph_partial = dlmread('ph.dat', ',', 'A1..B2')) ^% _5 D- P; f/ ]3 s; a4 m* I
  _1 u/ W  n4 u, D! {+ u
只读前两行和前两列;
& H2 T5 S7 @- x! J
' B) Q& i0 H+ h2 D& J. f" r4 M如果文件比较大,可以使用textscan分片读取。  K2 V7 ]7 ]. [: X/ g) r

* ^& a, ]/ N7 H. o3 ~importdata用法(help中例子):; V6 t  K6 e9 W9 A$ m# A' a# @

- V/ L9 g9 F( S$ D6 U( u 9 t* }2 s6 @2 W
# s2 R# P/ [: U: J6 _
命令4 z! _4 d/ U' b

+ l( v# z+ W$ c9 Z) A1 N1 Q+ Jgrades_imp = importdata('grades.dat');/ I4 s( E3 x7 G/ J
的结果为  o) R5 P1 C8 g! D) p

% Q: c  C4 n* I8 w! Z
3 u' R5 w/ M) |4 r5 a& w- H' `; ?' T7 g) K& w
textscan用法(help中例子很多):
) [2 f0 ]. ?1 P9 Q# \# K5 C- ]2 v+ g. u4 o$ Y2 d
9 d) @0 U. P0 T. Y
* g( N/ L% g" [+ P( ?3 P
运行如下程序
4 b& n4 M& c8 A- Y0 L% Z) B, {  `6 K% l
fid = fopen('nonrect.dat');% J% I' m6 O1 T: o4 g: q
c = textscan(fid, ... '%*s v1=%f v2=%f v3=%f %*s', ... 'Delimiter', 'n', ... 'CollectOutput', true);1 ?% K7 ?' K( ^8 X3 q
fclose(fid);; P/ x4 g' E3 F# V* f
结果为
1 I+ [5 ^1 N- z" f6 d1 Z6 r
( S2 q' `, s3 \/ S. R% }9 H9 {1 a& a
4 z+ `% j3 U2 p' ~& ]
3 [" G" m" Y, t& |2 D* O2 @1 X底层函数:" p$ T$ n$ Z' t, Z3 H

3 F# X2 e4 \8 a常用的有
* u( }0 p3 G2 R, y3 r; D  p3 J) G( c  t
fscanf读取格式化的信息;
$ d: ?8 g# c( P5 X* g6 @$ r. W$ S
% h6 N/ i  A. J0 X% ?! t5 E) lfgetl和fgets读取一行信息;
! x" N% |0 c' Z! W8 U
# b( f4 K7 k" C( Tfread读取二进制信息;
/ [* Y2 `' R1 [2 `/ x) U3 J$ K+ U! |/ m1 L1 _
feof检测是否到文件结尾。9 l, w6 z, t( r  }
. ]3 f/ |7 X. i/ U; O

作者: yin123    时间: 2020-3-16 16:54
matlab文件读取相关操作




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2