数学建模社区-数学中国

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

作者: yuleichengchen    时间: 2012-7-26 21:59
标题: matlab的文件处理功能textread
实际应用中经常要读取txt文件,这个时候就需要用到强大的textread函数。
' X; q' ^3 n" d5 J它的基本语法是:
% `. m( q9 H0 c* Q, D[A,B,C,...] = textread(filename,format)$ G9 A( m0 H. w3 ?  s
[A,B,C,...] = textread(filename,format,N)$ Q4 W3 f. i) V0 B* G- S3 E5 N
其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。
3 i5 [" U& d% B. {2 K中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,...] = textread(filename,format,N)的语法,读取N次。4 l5 ?9 }- Z) h2 a6 b  {/ W- S
举例如下:. O+ I, n( [  Y( W, G4 Y' j. {
例子1:myfile.txt 中的内容如下:
/ G" h, X7 L+ t1 L1 2 3 40 C" V3 M$ ?% _7 V/ ~( F- v3 X' c$ j, a
5 6 7 8
& x8 r  f. z% k  I9 10 11 12
6 T2 _3 q  q5 ?0 f7 q. ^相应的语句为:
/ e0 j. ~( B$ j1 K% [filename = '.\myfile.txt';
5 d7 C- D) @* [[data1,data2,data3,data4]=textread(filename,'%n%n%n%n');
! O; U" M* l6 X8 f或者为5 W5 a$ s& l/ p% E
filename = '.\myfile.txt';
/ y* r+ @- ]& O8 H+ M( t[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);+ y, w8 g6 a: m. m8 S

$ B; |: l: [# u8 x+ ^5 U- |例子2:myfile.txt 中的内容如下:
% l; M! z) }0 U4 W  r4 B1, 2, 3, 4
3 I2 v5 F) o1 d* }5, 6, 7, 8
: W4 r7 z/ B* D1 B  N( C1 e3 S+ R' `8 j9, 10, 11, 12
$ k  H  ~  k, ^* Z  Z& z4 A. Y4 L相应的语句为:5 U' J2 V$ V. e5 e. Q
filename = '.\myfile.txt';
# Y2 g" d' T+ o" b3 a[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',');. t* k! q1 g7 g9 [/ _; L) p5 O) [5 p
这里delimiter指出分隔符,读数据的时候会自动跳过分隔符。
+ O% O+ Z- d6 X2 J: J2 |6 y! d* |+ B" j- {- L+ u/ H0 v9 }

  {0 _$ O8 U# I; W3 m例子3:myfile.txt 中的内容如下:% f7 T+ M: J# S9 ?# i( B2 G  _' E
% this a comment
% [& I4 {2 G6 Y1 [: Z- d* D( d1, 2, 3, 40 ?! G+ m! a- }2 e, B4 @
5, 6, 7, 8
, ^% r4 n/ R& {: }" m2 Z* p9, 10, 11, 12% j7 ^$ k) l9 I" J1 |  o$ ]: x8 B. U1 z
相应的语句为:( [4 S6 I6 _* |" P/ A; M
filename = '.\myfile.txt';8 W2 J/ F  @, o$ A& i9 b8 E
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',','headerlines', 1);. A& H* Z, o) e" l
这里告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。6 [2 u* J! i* |% j" c  a- `

8 U" C9 f/ N% J/ y! z例子4:myfile.txt 中的内容如下:* L0 ]& o) p5 ]
Sally Level1 12.34 45 Yes$ {* S# F1 r$ Z" }; _
相应语句为:! l) T1 m2 `+ Z0 A$ J$ B

8 F: h0 V0 s( j5 K0 @" Z2 ]& Lfilename = '.\myfile.txt';" |" \4 W: G, ?
3 P: i& m5 _$ v3 l  y
[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)
: v5 o9 k3 {6 c; {: V; F; Z%*f 告诉textread跳过一个浮点数。) C$ w- [# F6 g0 ~1 Y& D; [" {- x4 }
4.2 如果要忽略Level,指读取后面的数字,2 e; h1 H9 q) X, x7 N% N6 h
, L* d7 c, J  D0 m
[names, levelnum, x, y, answer] = textread(filename , ... '%s Level%d %f %d %s', 1)例子5:myfile.txt 中的内容如下
9 q2 s" O: ^  V+ s! v3 H1,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' ,';');注意:
- M4 q( M4 S% i9 n5 d6 T; k  Dtextread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。




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