数学建模社区-数学中国

标题: matlab的文件处理功能textread [打印本页]

作者: yuleichengchen    时间: 2012-7-26 21:59
标题: matlab的文件处理功能textread
实际应用中经常要读取txt文件,这个时候就需要用到强大的textread函数。
$ Q0 l2 t: d. m* O/ S5 R/ }6 J它的基本语法是:6 e! R7 w6 B7 T+ w- X
[A,B,C,...] = textread(filename,format)
! N/ `& q/ {  J# O2 {3 X[A,B,C,...] = textread(filename,format,N)
7 s2 p1 ~  C, _( W' D其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。( Q7 v$ w/ m+ w$ i( j/ d6 A
中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,...] = textread(filename,format,N)的语法,读取N次。
" S7 @; A, |. o. E# p举例如下:  h+ [2 u5 W9 y0 \
例子1:myfile.txt 中的内容如下:
$ a. Y% z" U$ \6 s) t! U9 g7 w1 2 3 4
" z, v7 ?; |. u4 [5 6 7 8
4 y$ x% W  E% O9 10 11 12% ?9 b+ {  n4 x; D5 T& T" C. {
相应的语句为:- c  d. X+ [) Z& O+ T* i$ E) U
filename = '.\myfile.txt';
" B' y/ B/ Y8 x( Y# ]0 l( l[data1,data2,data3,data4]=textread(filename,'%n%n%n%n');4 p+ d, y9 d9 U/ Y8 f) |' @: U
或者为7 N, R  X8 M- e  z- K, x9 o7 Q
filename = '.\myfile.txt';; }( }6 T- @* D! L# ~
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);
1 t$ _( m) W2 X" U* J# V/ i& ^# A) p6 M% M% h$ m
例子2:myfile.txt 中的内容如下:2 P# [9 b' c% N" r
1, 2, 3, 4% |8 |5 X, @& t) q- N4 t5 s' L" |% m
5, 6, 7, 8
# g; C4 S6 Y1 ?; ~9, 10, 11, 12) L+ _0 W6 L0 I( V" r) E0 w! i
相应的语句为:
3 s8 E' I$ ?5 E, s7 l9 Ffilename = '.\myfile.txt';
0 Y, C( i8 p( U[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',');' ?6 G, ^; H6 r  }4 D
这里delimiter指出分隔符,读数据的时候会自动跳过分隔符。6 U3 c3 C# |( w2 d9 @: G

. D7 S# ?7 v, U3 m6 E# h
! }; c: }" K( n8 B4 |) e& D, F例子3:myfile.txt 中的内容如下:
) M. t8 q. B* @+ }6 m% this a comment5 {& A9 Z- \& r  P( G9 {) T
1, 2, 3, 4
1 S; N; [3 l" p% t2 o/ N9 M! j5, 6, 7, 8( H- T  S. @' C3 ~
9, 10, 11, 12
' t. F1 U. W$ k  C0 Q3 s相应的语句为:
  S1 F/ j1 W6 Q7 jfilename = '.\myfile.txt';
' K' I: ^) x( c" N$ t5 P5 t[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',','headerlines', 1);6 S* R1 c) Q/ {1 P' p2 ?
这里告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。
( l; M: x9 I- `$ e; W' R0 u" C0 |/ @4 N  v9 f2 a1 h& b/ @
例子4:myfile.txt 中的内容如下:
  {  N- u/ O* r2 h, L, p  M2 u. ^Sally Level1 12.34 45 Yes
! y8 X" N* M4 K5 x- t相应语句为:
2 e6 n0 B- }+ P7 T! h8 w1 ^
+ |+ p( T# v2 W( d. rfilename = '.\myfile.txt';1 x4 k. s( t' r' C! q& G1 l! t
: ?  U7 R) `$ I: W! W5 e
[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)
$ ^) \: f4 t# N$ t$ c%*f 告诉textread跳过一个浮点数。
: v2 r' A) z' F4.2 如果要忽略Level,指读取后面的数字,
, a$ l3 G3 n% V5 H; w: ~' D; W0 B( Y. f: R# U
[names, levelnum, x, y, answer] = textread(filename , ... '%s Level%d %f %d %s', 1)例子5:myfile.txt 中的内容如下
" y( n1 K, j8 m5 X1,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' ,';');注意:
0 a5 e) u9 w6 h8 e0 s6 f" h% |textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5