|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
6 x2 L7 C6 u) U# s4 H1 n7 w
matlab的文件操作函数常常会用到,比如load/save,importdata,xlsread/xlswrite等,但是对不同的文件,不同的函数便利性是不一样的。对于专用的文件,专门的函数是最方便的,比如excel文件,用xlsread/xlswrite是最方便的。而对于最常用的txt文件,有几个常用函数需要在不同环境下使用才能效率最高。看了help里的Importing Text Data Files,做个小结吧!/ {0 d# k7 I. o1 N+ k, E
导入数据最方便的就是UI接口了,即Import Wizard,File > Import Data可打开,如果在脚本里,为了加快处理,可以使用importdata代替,但是它有如下限制,数据要呈矩形存储,便于放入矩阵中,对于非字符,如果是作为文件头描述是可以的,否则不能用此函数;: d D5 d7 E7 T T1 I- i8 Y& H4 V
* s0 ^6 @$ k Z# K# ^
在以上条件不满足的情况下可以使用textscan函数更灵活的读取;0 x6 t& f) _' u/ T# l* }
" `- ?/ ?9 U( B' V8 n9 R0 Z+ `6 k% T
如果textscan仍不足以满足要求,就只能使用底层的I/O函数了。
5 g6 }" Y7 O) i6 E' M% N% i7 G5 W: O
另外,如果想从矩形存储的文件中读取一部分,可以使用dlmread,如( N+ d8 T0 h2 `1 G2 n; z }
& c6 W+ z4 ^5 \- P8 F0 a
ph_partial = dlmread('ph.dat', ',', 'A1..B2')2 f( h: i2 f8 [
5 y$ Q! G7 G. O! ]只读前两行和前两列;
1 K8 e* `! R7 ?+ N4 r5 f! Z
# N, [3 X0 @$ a& h9 i8 f1 E# ?# w如果文件比较大,可以使用textscan分片读取。
9 }" m" u# {$ s8 \6 N
. [! H) p3 r$ k) V( B" e/ z2 _6 u& Qimportdata用法(help中例子): \: h! x) F- m' _
/ j m9 [& i- E# |* e+ u, y" F
! }8 l) T- H5 E. `6 x- L2 x! ], J$ L5 a! D
命令
2 \% V' \/ E. ~4 g* v
& y) ^+ [/ L# D: s5 a1 ]( ngrades_imp = importdata('grades.dat');
, E" \+ x, c+ z的结果为 W% I& S! _$ {8 t7 E& x
) ]5 L* k% B" d/ _& \
- y& Y4 P2 P3 [* F1 n
: g% r" w8 @4 e( \' w- ^- ptextscan用法(help中例子很多): O* ^6 v7 a0 | K& C" f* `
! [3 h" ]) t. |2 k
P# m" n# |+ F) k, x
M2 u$ m# l( A运行如下程序$ R+ A* z/ x# y( G) S7 i
! p/ f7 p/ ]& x& H* p7 z/ a Jfid = fopen('nonrect.dat');
; X: c% ]5 l P6 w: gc = textscan(fid, ... '%*s v1=%f v2=%f v3=%f %*s', ... 'Delimiter', 'n', ... 'CollectOutput', true);
/ w& P' L ]- e5 zfclose(fid);& n; W j* x' o, i& r
结果为
6 A' C7 r! c6 [
: q$ j# j8 q. ]% I: j1 B
& F) G/ K) k: r: G+ G- `% A$ ]
1 c, N- b# T3 R$ ]( E底层函数: f0 u8 Z+ Z0 P, l
3 v6 c+ V) m8 n7 S6 F常用的有! h- d" u9 I# r7 V" L4 t" [7 y) a
7 B3 O$ j# |; Y& z) @ w
fscanf读取格式化的信息;
: }" R, h4 b& a U: F- j
9 W* q* R# ^& h* E3 ?) Kfgetl和fgets读取一行信息;8 w6 B# V% g2 d5 r7 r
+ j5 {. m5 R' i6 a2 E& y
fread读取二进制信息;
. f( J! z5 T, p, b" }" a+ @" m
0 @, _) U% p) qfeof检测是否到文件结尾。% F2 y; q2 I: J, Q7 R) S$ W
: p5 ~5 C: L$ D( W
|
|