数学建模社区-数学中国
标题:
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" q
1 2 3 4
( C# T( o: ?9 Z- O9 b6 ]. s
5 6 7 8
: y# |9 G+ I2 V
9 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% T
5, 6, 7, 8
5 a- u, y; {! Q; r! V' H
9, 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 N
1, 2, 3, 4
* N* n/ V$ A. ~- a k3 ?
5, 6, 7, 8
q( V. C: \4 ]1 t. h! u
9, 10, 11, 12
2 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: a
filename = '.\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 A
4.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 | }! p
textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5