数学建模社区-数学中国
标题:
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 w
1 2 3 4
" z, v7 ?; |. u4 [
5 6 7 8
4 y$ x% W E% O
9 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 F
filename = '.\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 comment
5 {& A9 Z- \& r P( G9 {) T
1, 2, 3, 4
1 S; N; [3 l" p% t2 o/ N9 M! j
5, 6, 7, 8
( H- T S. @' C3 ~
9, 10, 11, 12
' t. F1 U. W$ k C0 Q3 s
相应的语句为:
S1 F/ j1 W6 Q7 j
filename = '.\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. r
filename = '.\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' F
4.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 X
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' ,';');注意:
0 a5 e) u9 w6 h8 e0 s6 f" h% |
textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5