- 在线时间
- 20 小时
- 最后登录
- 2012-10-25
- 注册时间
- 2012-7-18
- 听众数
- 6
- 收听数
- 0
- 能力
- 0 分
- 体力
- 476 点
- 威望
- 0 点
- 阅读权限
- 30
- 积分
- 173
- 相册
- 0
- 日志
- 4
- 记录
- 1
- 帖子
- 57
- 主题
- 4
- 精华
- 0
- 分享
- 1
- 好友
- 10
升级   36.5% TA的每日心情 | 怒 2012-10-25 23:22 |
|---|
签到天数: 49 天 [LV.5]常住居民I
 群组: Matlab讨论组 群组: 学术交流B |
实际应用中经常要读取txt文件,这个时候就需要用到强大的textread函数。
) o$ f: ~3 ~: E n/ R9 ?" B它的基本语法是:) {3 i+ ?. w8 m- K0 i' B
[A,B,C,...] = textread(filename,format)- u! K8 t3 J$ [4 I8 v, r
[A,B,C,...] = textread(filename,format,N)
; J& x5 m9 d) N1 |其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。
' O! {; x. K' @: r' S$ P中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,...] = textread(filename,format,N)的语法,读取N次。& ~( U9 Z7 w) c) `
举例如下:, y5 @) h* F4 x# {
例子1:myfile.txt 中的内容如下:
; U6 b$ w. Y: H6 y0 H; \4 B6 |8 n1 2 3 4
% b9 F ?2 V8 G4 @1 q, `5 6 7 8( S( Z) `0 l0 B
9 10 11 12. f' } ?8 ^- G
相应的语句为:9 k3 K6 ~: f5 T* O$ V
filename = '.\myfile.txt';$ O6 H3 B4 O3 J1 j: U& r
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n');
6 Y1 X3 N! w: u) o或者为
& ^0 _& r Y/ P0 H; N* x4 b6 }* Bfilename = '.\myfile.txt';. X* p# y/ s, y( { u
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);
' l, |: j: _" Z) p: j. [$ \- \$ F
- a8 O2 b ? o/ V, }5 u; K( W例子2:myfile.txt 中的内容如下:$ W, c* u5 R9 G7 F2 r
1, 2, 3, 4
, Y" `5 e) G2 g$ G6 x5, 6, 7, 83 h/ E1 G: K I7 [
9, 10, 11, 12. {( K& T" g, q2 \
相应的语句为:
" M/ E/ t' P. q9 \) h* Y( nfilename = '.\myfile.txt';. E; i% }, G( [$ f3 b7 y
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',');' J* }/ W/ I' ?- _4 ^ U
这里delimiter指出分隔符,读数据的时候会自动跳过分隔符。- d. z4 p4 Z" r& x5 V, G3 u5 A
/ x2 `6 f0 \5 K4 I) |
" ^; D# N0 Q2 H3 P) G例子3:myfile.txt 中的内容如下:
, @4 \3 F- Z( v$ L3 |" Y" L7 ]4 {% this a comment1 y9 `# I# h( R" T( T
1, 2, 3, 4 i$ L+ y% ^3 \2 B
5, 6, 7, 8, T$ V2 G! {6 u9 R* e( j1 J2 H% D* p
9, 10, 11, 12$ c& [3 r/ y2 b5 ^+ d
相应的语句为:
8 ]9 `& P& w5 Tfilename = '.\myfile.txt';
1 I* K/ ?" R' W[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',','headerlines', 1);
* |# p# E2 s1 F. Y5 _这里告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。- f, K2 U, ~0 Q/ F' B3 B) j/ q
5 _$ `! B( F/ R) |; Y2 g6 f
例子4:myfile.txt 中的内容如下:( B5 ?+ D6 N% \, k5 Z& v
Sally Level1 12.34 45 Yes+ z6 l# u" R7 J
相应语句为:
( h! ~8 ]4 ~5 w* x) n% ~
5 \4 B8 J* \. c6 ~filename = '.\myfile.txt';
6 e0 u/ v9 ^3 W8 p0 K
4 `) {. |3 d$ J2 S* ^2 {7 _8 @, G[names, types, x, y, answer] = textread(filename , '%s %s %f %d %s', 1)4.1如果要忽略12.34这个浮点数。[names, types, y, answer] = textread(filename , '%s %s %*f %d %s', 1)
$ x5 V. l/ S: s' D3 d; Y* P%*f 告诉textread跳过一个浮点数。
' N# c8 ~. j, x1 W: @+ Z+ I' X% s( u4.2 如果要忽略Level,指读取后面的数字,
2 G' D$ c$ S# R! |7 B2 C# a' n' S
. `0 l D- q" O' Z. O$ _3 P+ Z& V[names, levelnum, x, y, answer] = textread(filename , ... '%s Level%d %f %d %s', 1)例子5:myfile.txt 中的内容如下; d* C; r- v# p, n- [+ F v& c3 ?
1,2,3,4,,6 7,8,9,,11,12想用nan替代为空的部分。语句如下:data = textread('myfile.txt', 'delimiter', ',', 'emptyvalue', NaN);例子6: myfile.txt 中的内容如下 Sally Type1 12.34 45 Yes Joe Type2 23.54 60 No Bill Type1 34.90 12 No如果只想读第一列,其余的跳过filename = '.\myfile.txt';[names]=textread(filename,'%s%*[^\n]') %[^...] - reads characters not matching characters between the brackets until first matching character %[^\n] 就是一直读到行尾。%*[^\n] 就是从当前直接跳到行尾。 可对比[names,rest]=textread(filename,'%s%[^\n]') 例子7: myfile.txt 中的内容如下 Location;date;discharge Lobith;1989-01-01;00:00;2801Lobith;1989-01-02;00:00;2619语法如下:[Location,... % 1 yyyy ,... % 2a datestring year mm ,... % 2b datestring month dd ,... % 2c datestring day HH ,... % 3a timestring hour MM ,... % 3b timestring minute discharge] = ... textread(filename,'%s%f-%f-%f%f:%f%f',... 'headerlines',1,... 'delimiter' ,';');注意:
+ U" v; X5 j/ E5 Q" a- s) etextread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。 |
zan
|