数学建模社区-数学中国

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

作者: yuleichengchen    时间: 2012-7-26 21:59
标题: matlab的文件处理功能textread
实际应用中经常要读取txt文件,这个时候就需要用到强大的textread函数。1 |  B+ m3 B3 P4 p
它的基本语法是:" ^0 n2 [% R  y: P
[A,B,C,...] = textread(filename,format). `% c' S& B. F1 @& r, }; [! h
[A,B,C,...] = textread(filename,format,N)
5 @0 B( Y; ?/ {0 `. k# o其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。5 S" Z- |1 m9 b! B. z
中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,...] = textread(filename,format,N)的语法,读取N次。8 i$ N  M/ R4 r
举例如下:
9 C% r) z& a4 s" g; D: K0 t: o例子1:myfile.txt 中的内容如下:
7 p' e! b3 x7 R+ K! W8 k6 F$ n" q1 2 3 4
( C# T( o: ?9 Z- O9 b6 ]. s5 6 7 8
: y# |9 G+ I2 V9 10 11 12( H9 y6 k( {7 ^
相应的语句为:# |, l& Y1 Y* ]* m0 S: S9 S/ o
filename = '.\myfile.txt';
& Z; f$ F! G) Q5 k  _- X- l& G; H2 Z[data1,data2,data3,data4]=textread(filename,'%n%n%n%n');5 H0 t: w  f4 _1 r6 d
或者为. }) v* y$ K9 W& @
filename = '.\myfile.txt';- P2 B5 [9 G0 ]% A1 ~4 v* B7 z
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);- c4 ~: Q* h1 o  a) |2 J1 [, G
% N0 V: ^! x$ @& h3 }, `' j
例子2:myfile.txt 中的内容如下:" H2 U0 o4 [. l/ p
1, 2, 3, 4
+ p4 u1 w6 w$ R% T5, 6, 7, 8
5 a- u, y; {! Q; r! V' H9, 10, 11, 12
6 A+ S( A) ~, g1 m2 `. [' i" w相应的语句为:  t% b9 I( o' G( E3 A
filename = '.\myfile.txt';" X  U7 T7 G( o! e
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',');
* {2 }! {6 o# g% z- Z这里delimiter指出分隔符,读数据的时候会自动跳过分隔符。
' l* c, l  f! R  Q- i% X  z
/ o3 T6 J$ I& j2 z& k
) ^6 C6 c9 C7 T3 p7 z4 J9 u( a例子3:myfile.txt 中的内容如下:. M" c/ v' B% M
% this a comment
2 {8 w4 Q) L8 R3 l  Q) i1 N1, 2, 3, 4* N* n/ V$ A. ~- a  k3 ?
5, 6, 7, 8
  q( V. C: \4 ]1 t. h! u9, 10, 11, 122 S) ^6 Y0 Y) W# l1 {4 A
相应的语句为:3 j3 L3 ~1 O) ~. N
filename = '.\myfile.txt';' T9 t8 W4 o! H" v, T& C: _+ a
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',','headerlines', 1);
( {9 F9 `, H6 K1 |9 }这里告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。
) ]( E  f2 l9 p+ i' X4 q/ q* g" l$ U* U8 ?3 A4 n
例子4:myfile.txt 中的内容如下:0 H6 s4 b$ j% }) d. Q1 r7 W% Y& u
Sally Level1 12.34 45 Yes
% ]# F( B  k, w- K- j相应语句为:, t, o% G$ y3 ^- P! h/ e

8 m+ T/ v3 o9 N1 q: afilename = '.\myfile.txt';
8 U' z4 j8 \! ^( u% D, w6 [) W
' D) Z* R- `- P# 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): S( e. z+ Q; R
%*f 告诉textread跳过一个浮点数。
( n, }0 g. G0 x% U# a/ s; W6 Y# g5 A4.2 如果要忽略Level,指读取后面的数字,
6 ?8 \& g8 p: Z& i) K; d: L9 e3 K
. w6 `7 k3 ]% \5 P[names, levelnum, x, y, answer] = textread(filename , ... '%s Level%d %f %d %s', 1)例子5:myfile.txt 中的内容如下" v" H: D4 \( O8 M/ l6 e7 P
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' ,';');注意:
! y5 K8 ]! `9 |  }! ptextread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。




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