|  | 
 
| 
! h# m; _+ ~0 v! m; P
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  eval的功能简单来说就是可以把字符串当做命令来执行,3 C+ _1 ?6 h' h5 ]
 
 1 U4 g  v% B$ n% t$ B4 M8 L* p之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:* [- w: D6 n- {3 q0 R  E' Y) S
 ) S* Y* E& J! R) e. L6 f
 eval('y=sin(1)')与命令 y=sin(1)等价0 E4 h' x) k( A1 }2 [' U
 7 V( l$ w/ N6 M8 W0 J
 emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?
 ) n+ R& h- y! M: S! \3 X4 E! R3 A5 p1 x2 Q9 S1 B  A. d
 最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:
 ! i8 g& ~' U- ]) q/ L: v
 2 Z# g9 C4 x9 d8 x8 G  |3 [eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,2 b7 D4 }6 ?$ C5 ~7 X* i$ ~) J
 
 ]( ^) p2 J. O3 w/ \当然你可以写三行:
 ! ?+ N2 \$ Z8 Y7 I+ w9 G  v' \5 U/ b* T+ d8 W
 xlswrirte('data1.xlsx',data1)# U  |* D/ P/ P+ ^+ G) _( C
 
 " n4 b  Y( C$ i& zxlswrirte('data2.xlsx',data2)4 N# z- D  W( N# S
 
 6 X+ j; h: B; Lxlswrirte('data3.xlsx',data3)8 J0 k$ W; ^/ m! W/ I
 
 8 A+ x; p0 f3 d& O: c但是假如现在有1000个这种data1,data2,...,data1000呢
 9 |" r$ d& P# ^+ }$ X9 d. z2 C; j: D+ l
 这个时候就需要eval出马了,我们也可以只用三行:
 5 @' D! Y% u9 N1 S  J0 i5 ]
 ; z! }- `, U7 k6 i; T. B( _for i=1:1000! D4 y) A! I" `: k& i+ f
 
 4 c! s8 U! [4 d  xeval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
 ; q% u* l/ x5 C% s! f' k
 3 x' L5 T% D! D/ p9 E& d- i0 ^4 D' a; E, oend; }6 P4 k2 A$ N7 Z; }
 
 : W6 U. L# S, T9 p%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
 8 U0 v2 S# H, }1 @# t& O. Y. }; i! r3 V0 k
 %使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况
 5 I$ ?2 t  y; m: }& E/ s: {" w3 ?
 最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
 - ?  g2 @! X0 @9 }
 * X- c- b% I8 B2 K$ N这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:2 Y% B$ |7 ?8 i" w9 p
 & \# n/ f2 \) d/ ^% H' ~* D- G# _
 
 " B- o7 e& a3 a9 ^3 Y3 g0 G3 v+ z& `$ {8 D
 clear  b1 G7 B5 J0 i0 e) t# ^  o
 clc
 2 W/ U+ ^7 y# ?3 p+ I3 ?close all0 J  [+ \' L8 g
 load time_volume_data.mat%载入数据, N* G$ r1 [$ M  Z, v8 g
 %把站点流量按天按时段写入excel文件3 c4 \: Y. o4 K" ]! x! ?
 m=1;
 $ c+ p' [; C* L7 r% V* l: m8 u. qday=1;% n9 R* c2 d9 _: h, }3 d4 s8 H: s
 for n=1:2880& ?3 V7 `7 t7 Y0 r  n3 u
 eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);
 ! k( k8 B2 `) X! Q    if m==96
 * `. T5 Y+ |) z1 x$ M9 s" @        m=0;) I1 [8 q& l0 F
 end
 . \0 l8 C& I( C% f! ]    if mod(n,96)==02 j& d/ b7 j: E" p9 V" O
 day=day+1;
 * s: v4 f4 D8 q1 C    end2 @# R3 J% ~8 N
 m=m+1;
 0 k: K, C7 O8 ]1 E6 Mend
 - d9 j4 _, k" H) F+ J  {2 e1 K以上,希望大家eval用的愉快!
 | 
 |