" ]7 [/ { m+ @" T1 I / D% y4 ?5 J% _3 ~ -----------------------------------------------------) `) w/ m' ]$ M s
怎么用matlab读取多个数据文件?/ Q- Q" l8 ~& r* T% W J1 x% ^4 \6 E
, U% b5 n( c* T) |2 g ?# Y" ~5 J4 ~8 Q- E6 J
1:如果文件名规则& j+ F, y. K- O0 E3 a3 S0 U
_, q! r. o$ k3 p2 \ & F* G* H: j/ d& P4 P$ r( d% 文件目录: s& ~$ s: a8 `% |1 i) m5 l) \ g
9 h6 `8 J. H3 q4 |3 X* X' D
my_dir=' /home/my_calculation1/test1/'; / R, m1 _% q: L, m1 m& k. f6 v, y: E
' {% U2 ~* |& E' _3 g
% v# o0 j6 r6 e) q9 d, \1 M' R
/ K5 P* \- B$ J# g* L7 i " C; }9 Y- o7 h3 ~, ]2 P%文件名前缀 # e- @- x! E) [2 q, Y6 P! E% U9 {4 _3 x
my_pre_T='test';6 k s+ R+ v& ?
%文件数目 fnum =1:32; %Read files for i=1:length(fnum) filename = [my_dir,prefix_T1 num2str(fnum(i))]; 然后dlmread,fopen等操作就不需详写了!与单个文件一样。# a- l1 e/ L `) D: S# N3 s O9 K
end * A* O3 E3 }5 I8 P 3 c# |- H4 Z2 ]1 F - @0 h' h1 m i, h' v4 V $ T. l/ ^5 y1 P& |. Z , q2 ~4 ]) g: t5 \& |& [0 v. ]: q 8 d. P8 M1 Y: _- }2:文件夹数据批量读取的问题,命名无规则5 D1 S. G3 t# d% v
在windows下很简单,ls函数便可以得到一个包含所有文件名的字符矩阵。可惜在unix下得到的是个字符行向量。当然,处理下也可以批量读取数据文件,不过不想再写了。因为另外一个函数也可以实现批量处理数据文件的功能。即dir函数 6 ~+ _0 ^5 \/ e q0 T; h) g6 j4 F! m! ?) {( k t+ j1 U% I: ^
LS displays the results of the 'ls' command on UNIX. - ~5 c1 o- K g) J3 C
3 q6 }: V# x! b9 s3 K* c: l/ j' h& f6 [) ^
, |/ t) Y7 j8 e$ r' }; ]5 A* L# lOn UNIX, LS returns acharacter row vectorof filenames separated by tab and space characters. 6 h, ~5 |+ y8 a$ _( _, t6 _5 Q7 M; n9 n$ w v; V
# A G& C4 W: `& E2 e8 n3 E' {' t5 J) m5 q' \ p
7 F& u. s0 H* \9 t# M# j
1 ]8 D5 @6 i) w. w, ~) M! D
4 L, s) L6 e2 z; U0 s
# U3 F; d) |+ X3 A
假定.dat文件在/home/my_calculation1/test1/ 文件夹下,文件名符合matlab变量名的命名规则,要读取第二列的浮点数字为数组并以文件名为变量名。3 C2 z f( d' d% a! Y
0 E: [9 f. j. J# p1 [$ X8 z
9 K4 |; n4 Q, j$ o9 y, \+ B5 i2 d# R; a1 q* Z
mydir='/home/my_calculation1/test1/'; 7 q6 _/ O" r7 m3 U4 ? 7 ?6 _. i1 Q$ [2 n. W4 Utemp1=dir([mydir,'*.dat']); ! R/ z- Z5 [% {* F$ [ I3 @' {0 b s0 O+ p
( Z( V0 @6 K; Q: [; e# M" J# F, k. H; `
9 Y% j# }* j* o' Ctemp=dlmread(filename,'',0,1);2 z7 O3 `* ~3 y$ F. V: Q+ M
. Z! \( a5 i3 A8 r3 r5 T4 n
/ x- d& K7 ]% ^/ R2 g1 L4 t - {& s; s; L& [$ l! x 8 B& a& _) R: E) N1 Y+ s- z* X0 G; I# \0 ]" x
9 U! K# I. @+ H4 \
1、利用dir(外层文件夹)获取子文件夹;# |# E8 N7 d: @) r3 j' b5 t& B
2、利用dir(子文件夹)获取子文件夹中的文件信息;7 k. Y3 B9 \* ~$ P' K* I
3、遍历文件,做处理;7 Z4 @* l! W0 O4 t; K
对于遍历文件夹,也可以使用mathworks网站上的函数dirr轻松搞定。% I+ B: k: {$ ?
9 [% H# N# C8 q& j
' Q/ J- @* \, w) k; Y
- b) X7 a' G1 u( V* D注意:如果直接使用 temp1=dir(mydir]);读取文件夹下所有文件,应当从第三个开始才是目录下的文件。 另外,使用dir还可以遍历一个文件夹下的所有子文件夹。 3 a8 d8 D! h2 x8 G1 Heval_r([temp1(i1).name(1:end-4),'=temp;']) 1 y8 N& I' }; o$ h! x4 o + f/ D% c" U; C; Y, T1 X2 U; H+ O$ o9 f9 h+ u9 d G. D
dlmread,fopen等操作就不需详写了!与单个文件一样。 ) z7 h/ a; m9 W4 h% ]8 ~6 {+ Rend# D5 p0 m9 o$ {1 N
, m2 o9 H. t5 Q5 }2 r! k
. @- P2 N4 ?- P+ [4 ~0 n7 g# y5 N: b ; ?3 X+ [0 y1 C! C! M * ?, X9 a6 R, M% x4 O3 t' S' j# |0 N1 G( u9 g
" _! d& \' d0 j$ B0 G
现在有一个文件夹里面有50个的.dat文件.每个文件大概三万行.两列,第一列是字符串,第二列是浮点数字. 批量读取这个文件夹里的.dat文件的第二列。读取完以后的数组变量名就是.dat的文件名+ n9 n) Z; j& f1 k" p
0 L+ ~, I4 l# q. w" i
$ ^( C& m: Q$ A( `
1 F5 g0 s. A6 i: X) hOn Windows, LS returns anm-by-n character array of filenames, where m is the number of filenames and n is the number of characters in the longest filename found. Filenames shorter than n characters are padded with space characters. % b/ [! ^" \0 ~, {" j ; n7 V) M0 a2 ^% W" X : N& m9 n* X3 _6 X下面介绍下使用dir函数读取文件夹中文件的程序 3 U0 |; F' s9 {3 B# H# c) s1 k& _) k. c. h2 N8 Z9 Q