数学建模社区-数学中国
标题:
matlab的文件处理功能textread
[打印本页]
作者:
yuleichengchen
时间:
2012-7-26 21:59
标题:
matlab的文件处理功能textread
实际应用中经常要读取txt文件,这个时候就需要用到强大的textread函数。
( m3 a+ E3 O1 \% D1 @) f+ p
它的基本语法是:
: h# y8 w1 S: V% N" i) n& Y# J0 h
[A,B,C,...] = textread(filename,format)
. J$ U+ k) h, Y( ]: @' b6 m7 T8 N
[A,B,C,...] = textread(filename,format,N)
2 d6 l2 I+ ?: ^+ [0 `- ?$ h! k
其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。
/ o/ y' z8 j) b9 h8 a
中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,...] = textread(filename,format,N)的语法,读取N次。
$ F* f' v1 d a! y1 J
举例如下:
. t2 R$ D0 R. t& x3 T, `6 {& a
例子1:myfile.txt 中的内容如下:
' K# N/ \9 Q3 o. u4 W
1 2 3 4
; n! Y" |: A" x; t7 E- c
5 6 7 8
& W/ K0 F% E3 L" b7 c) `
9 10 11 12
5 k& v5 r& e# T2 P
相应的语句为:
4 K3 ]+ ^: U1 P( p7 G% r
filename = '.\myfile.txt';
3 x% _4 {' f, r, ]2 K
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n');
* M+ c( f6 p8 Y5 y0 C, _6 O- x
或者为
) z2 l! R. D8 u! p8 }/ z/ a
filename = '.\myfile.txt';
/ `1 H- V1 d4 j
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);
% y$ e: O! x8 c; S0 ~* d
7 b4 x/ D/ |2 v# `6 R
例子2:myfile.txt 中的内容如下:
: U" o0 R+ h6 I- u
1, 2, 3, 4
- c7 K" N: Z1 O; p( x. v
5, 6, 7, 8
) T) Z4 Q8 P/ u
9, 10, 11, 12
* C9 i& I7 ^2 y' W
相应的语句为:
, v* Q4 X8 Z0 d5 I `
filename = '.\myfile.txt';
* ^: D7 c% Y8 l0 ?+ @+ j
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',');
# ~% [7 b1 g, Y) @1 [$ v; @
这里delimiter指出分隔符,读数据的时候会自动跳过分隔符。
" Y0 [& D* x( p- x1 ?
; g [6 F2 S8 v- N" M- o
0 O0 R7 g. Q% o; K! ~1 A+ D
例子3:myfile.txt 中的内容如下:
' K, S9 w7 N: g- S5 {6 t% W: N `
% this a comment
; }, N2 \2 u( h9 f3 E3 }8 Q
1, 2, 3, 4
( `3 z+ G* p5 b! C
5, 6, 7, 8
6 N/ I/ ?3 z4 L: a- F
9, 10, 11, 12
# b. s8 _# x6 R9 L& q2 ?+ R
相应的语句为:
. b2 i, T& h& ?7 x
filename = '.\myfile.txt';
, k0 k3 {$ N5 r# z
[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter', ',','headerlines', 1);
) y/ ^" e q+ |$ C. K8 N
这里告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。
' u* ~/ N. W: B+ H
7 M" c$ d5 ~4 r5 }5 b, F
例子4:myfile.txt 中的内容如下:
! P% q. _* V# N9 j- p$ |
Sally Level1 12.34 45 Yes
% w$ n* n9 Q- z$ V" J
相应语句为:
. `& M5 z3 d* V+ L
( m, D2 x9 V4 G
filename = '.\myfile.txt';
# k2 C2 V/ w" h# L: `' i
+ v( j7 E* X6 n- g
[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% L7 G) U! r/ F" R2 p
%*f 告诉textread跳过一个浮点数。
* L. T( a8 E8 ?% X& u
4.2 如果要忽略Level,指读取后面的数字,
2 ~& G9 `6 n5 a9 x8 ]9 ~; l
/ g: n/ B0 ?, o) b, m
[names, levelnum, x, y, answer] = textread(filename , ... '%s Level%d %f %d %s', 1)例子5:myfile.txt 中的内容如下
+ S3 Q4 D) g, ?# C1 o2 o
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' ,';');注意:
) s/ ]+ y) U, _1 Z: q
textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5