EDA365电子论坛网

标题: 在matlab中读取txt数据文件(txt文本文档) [打印本页]

作者: ulppknot    时间: 2020-3-13 09:53
标题: 在matlab中读取txt数据文件(txt文本文档)

0 O# e2 r( b; H5 \# Z: V根据txt文档不同种类介绍不同的读取数据方法4 b2 t8 T/ b5 E, b  \8 a
4 i: \5 ]$ F$ E5 L- s; [
一、纯数据文件(没有字母和中文,纯数字)
6 C& D& W  u& F# }- Z, P  d5 @9 C9 y  i
9 p- v9 Z& V! m+ q1 M/ K* z# J  T对于这种txt文档,从matalb中读取就简单多了$ G1 [3 v$ [  A0 x+ B

$ G1 B# @8 O' ?3 q0 D例如test.txt文件,内容为' D3 C. f% Z7 W0 l* T- w

4 s( a3 G4 z; }6 Z  y+ w8 B- `6 R17.901 -1.1111 33.045' K+ d* G7 e8 W- e" Z
17.891 -1.1286 33.045( R4 H% z6 n/ E0 J
17.884 -1.1345 33.045
8 c0 E+ h0 z- W$ e9 n$ z& ]2 O% H- Y& W% b% y5 u+ ?9 A
可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。2 }; e9 |& _: \5 k3 Q9 E- \
- J' a  N  |$ s% i% b* g3 a+ l$ \
二、中英文和数据如test1.txt6 z" F9 ]. P, l4 H- j! o/ j
: I% o2 \, ^4 o0 ]5 J) O
你好/ X; ^" _" U/ S" Y" n( J# I: d
欢迎来到
5 i. \2 j( M  b6 g- P; G& t6 d- \) p3 B论坛
( D9 \4 ~9 U3 [4 x7 ]$ tedu.cn
# F, I" Y9 v& D0 T9 d7 t( C" W  }1 11 111 11111 x) i$ W6 X2 R& w) }3 U- a  O/ X  k, X0 z
2 22 222 2222
. H7 E3 C* c, n0 `7 l6 r2 m3 z3 33 333 3333
2 q( w" M. n6 W! I% w; `4 44 444 4444
( T: O! |% i* v" f0 j7 x+ q# e5 55 555 5555# E& W2 ]4 }/ C; S+ {& k& v/ b# u
3 r8 t  A& ]/ O& T4 |+ A
& n5 Y, l4 @# K, L# Z. g
这样的文件怎么读入数据呢?
" [9 D: U: f; r5 H3 x方法有多种,现举两个比较简单实用的。0 J8 B6 p+ z5 \* t( j* B
5 A5 v. P; L( z  O2 w7 r
方法一:
( f* Y  J: V3 d1 D. p6 \file/import data....../next/finish0 t7 F4 T+ n" O) q6 D2 p7 T
>> whos. G5 U+ r: [2 W& F% p
Name           Size                   Bytes Class* o) k( R  b) a: i, G1 A( t
4 R  B. U7 ?: L1 P: a
data           5x4                      160 double array
' H+ F4 n# i8 q% |( D- Itextdata       4x1                      300 cell array
* F& |: z( K$ K
; g' [+ |& D9 Z7 d% C, nGrand total is 54 elements using 460 bytes# R4 y/ @6 |& J5 a' `2 Q- i# G

# s6 m1 d- s- j, }3 n>> data% `. c. S: y8 n# p: r. _
2 z8 |( A, W1 G* e* n+ i
data =
! [* s6 D% D7 Y: n
$ l0 J3 v" M0 w8 q8 K           1          11         111        1111: g* y; r$ e3 Z
           2          22         222        2222
; q& K, q) b$ M( p1 \7 ^" P           3          33         333        3333
; C. @+ t/ @* P5 j9 `* [" r+ D/ H           4          44         444        4444
- l9 a( a1 A: `6 @1 a, z+ @! Z           5          55         555        5555  g1 }; l9 A) L; K/ S2 a! _+ Y4 S3 N4 I
- N8 L: c7 M7 N1 c$ Z5 r* p: V
>> textdata3 y6 @0 q2 v: c/ y
7 h( _( A9 h( X8 K5 ~
textdata =
) y; D9 \8 X( R0 J7 j' T. V; l( J- w# k' ~( z+ k# S7 ?
    '你好'
& e6 Y1 [0 ]1 C( @    '欢迎来到'
1 l3 ~6 S7 ]4 o5 j$ H    '论坛'" e% Z$ v& i! d. f) ^/ r
    'edu.cn') n. N( g" f. c, N7 O4 S5 C  B

  G. i% T& {2 |. x2 T! B! ~% W方法二:- Y# \& B: I. i/ v  I( A
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)2 S% H* a+ c4 f6 X6 E% b  p3 w  w9 I
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。
- g, w# f( R% _& \这里%s的个数和[a1,a2,a3,a4]对应。: b7 j# P8 r' @7 {( t
>> [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
% Q& x" i$ f/ Z. b+ l! b, `  y, V9 z
a1 =
' h* y" j. e% q" n0 s
8 _' Z* _; W& _; n    '1'
  A9 j9 ]( m3 e% V4 [  l    '2'" m$ b2 o: F4 H: Y
    '3'& r$ k9 n  d) ?% E+ `0 X& ^
    '4'9 X/ V: d! q! X; }" w1 I
    '5'
/ K$ ^4 H1 {5 O) i9 m: _+ {$ K; U. H% }! d; {/ l4 B
a2 =
2 G5 E1 C/ P& b7 \2 @# q5 _) z
( O9 v8 g  G2 \0 z% S2 z    '11'
+ _4 H& C2 w( R# e9 Z4 s    '22'
$ A7 s" _' x% P. O9 ^/ H0 V    '33'( y# g+ ?  v% P- ~' [
    '44'
: t: X; h, T8 g. r    '55'% ?8 j% U( @% U. g
0 }* g4 [1 r' Y" J: D, R) v
a3 =1 G' @/ I/ _& Y6 g

3 v8 k& f; C; b& J8 K1 H    '111'
( r1 J+ w2 q' W6 U8 s, u+ g9 S$ c    '222'
8 V" Q) n! }3 L    '333'
: @  B  j  Y4 Y5 U. v* m/ V    '444') u6 K' |5 x' P' j1 ^/ U: p
    '555'& w  ?3 S. T" v' v5 p

7 r" @, Q- W6 ^' y4 ua4 =
/ C3 Q' E" f4 @2 R( Z' H$ A; G* C9 z+ ?3 }: D/ \/ K2 y
    '1111'6 {2 c. v2 Z, e
    '2222'! r/ `: m# \0 ~- N8 C9 l5 B5 E
    '3333'- w2 O9 T8 {" r( @( H1 ]8 K- `
    '4444'
# T, o) s1 O$ k7 |9 T; i    '5555'
0 j  u+ j& e% p因以字符串的形式读入,所以有''。6 A* T3 V. j% ~' K- b# p& X
————————————————————————————————
& u+ @; u; A3 i4 x
1 n, O  C4 c3 Z$ t三、中文 数据 英文 混乱如test.txt- z# t1 m5 {6 R) \
- O' g& V' s1 [2 y. J/ o+ V
你好" z" L0 {8 q' H2 V1 p: t
1 11 111 1111
, f$ i) `% O6 X% Z欢迎来到
' J3 s3 C7 ^  U- T( M8 p2 22 222 2222
7 e6 n( [5 v  S论坛' ]* o% ~6 P3 {- a& R6 O
3 33 333 3333: Y% Z; l: Z1 \& U8 @/ m  ]
edu.cn
- Z+ Z, \) f- X: Z( G& S4 44 444 4444
: Q* e( n7 N8 R# K1 o! D( U5 55 555 5555
* d# L8 {( j9 w+ R2 ]5 j8 L, F6 w* `* H7 R+ A( ~* ~, q9 T3 O
说明:这种内容格式的文件用上面的方法是不行的。, L8 t1 g! `. s& g& H) z( y1 H/ H3 W  i

7 b  [* h8 `5 y& P' T( o2 |6 q以下是由chinamaker编写的一种方法:9 Y! T2 h5 n2 h# j9 \+ V9 c& k
$ R: q! W& {9 e" f& y' K
fidin=fopen('test.txt');                               % 打开test2.txt文件            % m. C, m" x# N5 w) n, i; M* I$ K
fidout=fopen('mkmatlab.txt','w');                       % 创建MKMATLAB.txt文件* U% _  L$ X0 |& `0 |
while ~feof(fidin)                                      % 判断是否为文件末尾              4 z$ l- v6 n5 B  Z$ ~
    tline=fgetl(fidin);                                 % 从文件读行  
7 t3 j0 D. X* \  e- L3 Z8 g  k% F    if double(tline(1))>=48&&double(tline(1))<=57       % 判断首字符是否是数值8 a1 T7 P7 w4 G  e8 p4 N4 _
       fprintf(fidout,'%snn',tline);                  % 如果是数字行,把此行数据写入文件MKMATLAB.txt
  K) u! l* Z5 W8 S$ x% L8 j8 Q       continue                                         % 如果是非数字继续下一次循环$ X8 S% n) q5 b5 B
    end
1 E4 I9 |3 t( aend+ V5 f7 C# c  W; w( C& b
fclose(fidout);
. [) J4 ^% w$ R- q/ DMK=importdata('MKMATLAB.txt');      % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来
( y, [) ~! M2 w$ V- z>> MK6 Y) j# ^  [. W+ Q6 m+ l

- T& a$ L% L& H5 GMK =! l! }6 a) D/ @4 m; C# x/ a; H; z3 ~

4 c, i3 v( Y! Y3 C2 B0 G           1          11         111        1111/ V, K: e! J# k/ d  Q* C* g
           2          22         222        2222$ z& u9 Y  J# Z
           3          33         333        3333
, L/ ^' V# U# m) e           4          44         444        4444/ y+ ^% M1 c# x$ h
           5          55         555        5555& q+ t& i0 Z$ U* l! i& ?

8 y& H/ \4 |% [  W/ O) }- v2 v4 p---------------------------------------------------------------
" A  k$ \" y& W$ h! E+ I, ~4 ?( m9 p9 o1 c3 u3 g/ ~
我的txt数据里既有数字又有字符串,形式为:
4 y3 }+ R6 a3 I. p  B; ~0.129515 DDAA  01  2.24609 94.50000  98) T- k2 x: y  K8 T- ~2 H5 ]
0.130434 DDAA  01  2.24609 96.30000  9A3 F  ~3 n+ \: G0 y
0.131441 DDAA  01  2.24609 97.20000  9B4 w- Q0 D6 ?* k& Y  _+ ?
0.132448 DDAA  01  2.24609 99.00000  9D
) U9 f  x" m& x  R0.133507 DDAA  01  2.24609 100.80000  9F
# p8 Q, E( q% F' w8 I0.134515 DDAA  01  2.24609 101.70000  A0
+ K3 `( X  }  r- }1 V............
6 h7 `: y+ D3 r$ r2 S) B- }我只想要第一列,第四列,第五列。
. I* q' I2 D6 v' C7 y6 {也就是0.129515    2.24609    94.50000 这3列数,) w+ Y9 G) o0 x; @" H1 O3 i; G& [
怎样导入matlab啊?8 f: ?% |0 ~5 ?" W5 Y- I% e
9 f: B3 D; Y+ t# ~

! o# x! c2 B3 ~4 v假设数据在data.txt里,且位于当面matlab路径里,用下面这句就可以了
' g" D0 z9 m& T0 C9 k3 A6 ~& K0 T5 V  d[col1,col2,col3]=textread('data.txt','%f %*s %*d %f %f %*s',-1);
2 {3 Q5 g$ C% F9 N' c. U---------------------------------------------------------------
作者: CCxiaom    时间: 2020-3-13 18:13
在matlab中读取txt数据文件(txt文本文档)
作者: helendcany    时间: 2020-3-16 18:42
在matlab中读取txt数据文件(txt文本文档)。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2