|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 L/ J# @$ i( R6 D0 ~
matlab的文件操作函数常常会用到,比如load/save,importdata,xlsread/xlswrite等,但是对不同的文件,不同的函数便利性是不一样的。对于专用的文件,专门的函数是最方便的,比如excel文件,用xlsread/xlswrite是最方便的。而对于最常用的txt文件,有几个常用函数需要在不同环境下使用才能效率最高。看了help里的Importing Text Data Files,做个小结吧!
( {- _5 I* e; R) F导入数据最方便的就是UI接口了,即Import Wizard,File > Import Data可打开,如果在脚本里,为了加快处理,可以使用importdata代替,但是它有如下限制,数据要呈矩形存储,便于放入矩阵中,对于非字符,如果是作为文件头描述是可以的,否则不能用此函数;
3 b; r; p8 q4 c' D0 i' x; V5 B- `) N% q- e1 ~9 n
在以上条件不满足的情况下可以使用textscan函数更灵活的读取;
/ C) ^& B! s( x: Q
% f! z* H2 o# g. Q5 E2 r: Y如果textscan仍不足以满足要求,就只能使用底层的I/O函数了。/ R0 g: L, I) D: S
6 o0 z% _1 l& z$ L4 D
另外,如果想从矩形存储的文件中读取一部分,可以使用dlmread,如2 d9 L' S0 ]: F8 j0 L+ B
/ |. [& m4 W# R6 p/ p1 \- k% t4 _ph_partial = dlmread('ph.dat', ',', 'A1..B2')
- q; `$ m* u! i: x% n3 ?4 U- x9 B7 V) e K/ }& p2 q5 A
只读前两行和前两列;
n, d C2 L4 R1 V3 L0 n5 h
( P; S7 r2 d1 Q: H) x如果文件比较大,可以使用textscan分片读取。9 S6 _2 M* |! C/ L. b
( _/ v1 \& I! H2 H+ q
importdata用法(help中例子):3 \$ i- e* W( ?; J1 p- k) s+ r7 o: p
+ I0 p$ H' l' W9 u0 I
6 I4 S5 U4 K# A# J) V3 Z
d+ [4 {7 Q- }" a) u命令" u) v4 c5 A1 z/ b" Q
6 }% c9 i* P! M" j* Bgrades_imp = importdata('grades.dat');
7 j- [) J1 T5 ?0 s" W的结果为. S" P% {- F8 ^/ {
! J! n2 f1 Q6 c+ t" q
" c2 @' X) D6 _$ e; b, }2 L2 g7 S+ p+ x5 [9 T
textscan用法(help中例子很多):
2 q: i" j7 Y! W+ q0 a7 i7 [6 s9 h) j7 Q6 l v% D; K* ^4 E
0 T/ s- D- w9 H7 u( J; y& s5 q# W+ O( S
运行如下程序1 B) I9 k/ P! \
6 P% u# S# r# |4 W$ T5 y7 O
fid = fopen('nonrect.dat');
' I- \! ?7 _- j3 ec = textscan(fid, ... '%*s v1=%f v2=%f v3=%f %*s', ... 'Delimiter', 'n', ... 'CollectOutput', true);+ F/ W: m+ O/ L2 h E
fclose(fid);0 h( r4 P9 Z" C7 ?8 @; ]9 K. v
结果为
" @4 d( B* ~3 i: E5 f, Y2 z
) T! E; \: j& H% v9 `
p$ o$ P3 |+ I- t2 b7 ]: X
* B; r3 Q% J' o0 K9 O8 W- f底层函数:: T) P# A: i3 t
. ]$ Z! Z# c4 G
常用的有
2 E: \/ F$ s+ {3 g, [. p7 ]+ F& ]; ]: i% G; c5 C1 S$ \
fscanf读取格式化的信息;' H5 H( J+ l# @9 \3 f- C
' D& G$ w" ~/ P ]. D7 b
fgetl和fgets读取一行信息;" k( i2 E1 a- e
* L) u# T$ E, g* V! Q- [fread读取二进制信息;
& j& g3 S! M1 U* y- ] @$ ?2 g o6 U d4 {
feof检测是否到文件结尾。1 B M/ J$ g1 L3 F9 Q# l' ~% w9 R3 Q
8 \0 k" N/ r9 t/ N* k7 r6 p/ c4 e
|
|