数学建模社区-数学中国
标题:
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 L
1 2 3 4
0 C" V3 M$ ?% _7 V/ ~( F- v3 X' c$ j, a
5 6 7 8
& x8 r f. z% k I
9 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 B
1, 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 j
9, 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( d
1, 2, 3, 4
0 ?! G+ m! a- }2 e, B4 @
5, 6, 7, 8
, ^% r4 n/ R& {: }" m2 Z* p
9, 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 ]& L
filename = '.\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 H
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' ,';');注意:
- M4 q( M4 S% i9 n5 d6 T; k D
textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5