|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
0 e" M( G& h ]matlab的文件操作函数常常会用到,比如load/save,importdata,xlsread/xlswrite等,但是对不同的文件,不同的函数便利性是不一样的。对于专用的文件,专门的函数是最方便的,比如excel文件,用xlsread/xlswrite是最方便的。而对于最常用的txt文件,有几个常用函数需要在不同环境下使用才能效率最高。看了help里的Importing Text Data Files,做个小结吧!$ b. }* m! S }- t0 Y
导入数据最方便的就是UI接口了,即Import Wizard,File > Import Data可打开,如果在脚本里,为了加快处理,可以使用importdata代替,但是它有如下限制,数据要呈矩形存储,便于放入矩阵中,对于非字符,如果是作为文件头描述是可以的,否则不能用此函数;0 k) {3 S6 L2 H0 g- c2 I* }0 h3 X
8 @; ?' Q9 F( s m8 l
在以上条件不满足的情况下可以使用textscan函数更灵活的读取;+ D7 o" [, [+ o* I
- X( K. O9 S' ~如果textscan仍不足以满足要求,就只能使用底层的I/O函数了。. w8 A( r' d% z7 i
( D* u8 m& S5 {- R" m) s$ h
另外,如果想从矩形存储的文件中读取一部分,可以使用dlmread,如8 e! V8 C6 Q% N/ y
; | A5 ?+ T; C; Z: ^0 {
ph_partial = dlmread('ph.dat', ',', 'A1..B2')
& w' W' I( d4 w1 z5 c& l7 q2 \- I5 `" F/ @) c( M
只读前两行和前两列;
5 r* t6 N$ y* B2 H0 C
/ l* t! e$ {+ `8 j. B) z* M9 m如果文件比较大,可以使用textscan分片读取。* j. ^+ C" f6 Y8 I5 r
6 }) l4 Z% z; x+ ~4 uimportdata用法(help中例子):
2 k3 P5 k8 \" L4 A
2 n0 z2 c3 B$ `, A4 x+ e
! t6 b9 W' W& S+ o7 E* a3 z: f4 ]7 ?: c6 ^+ S, N
命令; o n$ F9 t$ q6 k. a
0 r9 p/ k; [8 Pgrades_imp = importdata('grades.dat');
! O9 r2 Z% g+ _' l的结果为 H: M- V* N3 t1 Z# `
1 b0 K$ e9 {. n( c
0 V- }0 [. s& V1 V
% u9 f% g9 b' m- T: ^% gtextscan用法(help中例子很多):
7 |4 M" n9 ^0 h
1 i8 n: A4 H1 b" o5 V" e- B
. w" n, j" V9 K4 s! Q
/ p5 F0 r' m, y. U, r' P运行如下程序
: Y; m% a0 f. Z$ r5 g
0 y1 R, Q, k( {0 j9 E5 v: _fid = fopen('nonrect.dat');$ K/ d6 I$ Z: C% I
c = textscan(fid, ... '%*s v1=%f v2=%f v3=%f %*s', ... 'Delimiter', 'n', ... 'CollectOutput', true);
" B4 y4 c/ u) g, kfclose(fid);5 L( o* }) y/ s" S7 {6 o. ?
结果为
" ]$ |* [8 F2 V" @! R. b! q! S: n, Q2 f
" Y0 c- a1 W7 `4 I) D
2 H* ~) D" `) c4 j4 F
底层函数:9 h/ a4 X- [3 _; H8 r; T
- q p3 R! e2 H- T3 d
常用的有4 C y8 ?) v' t4 p6 k) Y
, u+ f1 g0 n! M% ?fscanf读取格式化的信息;2 Y+ ]9 R* R/ c$ P# F9 z7 R x
% ]* Q7 w. v% n$ \3 k4 S
fgetl和fgets读取一行信息;! k" g- u- {3 q/ o3 m3 t2 i. s
0 f& i8 F, U' W; s Zfread读取二进制信息;
: J1 _4 B" T' Y6 [- m6 D1 }$ T
, t# t" K5 X3 Y* i3 V3 M) kfeof检测是否到文件结尾。9 K( C# @' N5 l/ D5 f. U3 A
W4 g: W. G/ o9 s |
|