|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
0 }- _7 V! k. d1 c- G0 r0 Y# a; meval的功能简单来说就是可以把字符串当做命令来执行,
" D4 a0 G# H6 C3 J( [; k3 F8 X7 n( Z* O- n/ c8 l1 |# I* j( f+ S
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:0 t& ?! m" ?6 k- A5 ]0 H8 P
, W5 x s! b1 d1 K. v# h
eval('y=sin(1)')与命令 y=sin(1)等价
$ b2 L) k5 d' m; @/ j
" k- v0 d, Y8 T; s# L8 x. \emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是 这不是自讨无趣吗,直接打命令不是更简单吗?
' b* V* H3 a/ V( J/ q
" K: @# l* g. D5 r, o. t最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:
E% Z) I: w, P' f' q
& G# A) ?9 i0 N4 Y7 ieval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,; E, P2 q! C; r5 j
8 \7 y! u5 B) K, y" w
当然你可以写三行:. b- s! a5 L' h6 F; I! e
. Q3 j4 n0 g9 a% D8 a* ]xlswrirte('data1.xlsx',data1)
3 Q- |1 c6 U: z# l% H8 U- p
! z* }( J3 b r& ]3 m% ~xlswrirte('data2.xlsx',data2) o7 f. I0 @3 V2 z7 {
: h, S! {; x& u. i
xlswrirte('data3.xlsx',data3)1 c% j' U% b; u& O ~! [
8 X. C \, b+ ^1 h' C2 d$ |4 V. `但是假如现在有1000个这种data1,data2,...,data1000呢
+ M# x' m% s8 \" T, X4 n0 Y6 w3 S, q8 l: J
这个时候就需要eval出马了,我们也可以只用三行:' t) u9 ~8 g9 B! h* C: L: v
, f6 g$ G! {' M8 f
for i=1:1000) i$ G7 \: Z% K6 A
: b" @' p6 n+ _( teval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
- p) t/ f' Y9 K$ D! d/ e
. E7 N' V$ Q, ]2 Z8 L& Hend
+ ~; V/ q; X$ g4 Z6 d+ l
, }7 h) g% W5 H- a# k%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!8 }3 _- x& I5 P. `
" g( _3 w& y$ f, h2 n; G& p4 V%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况. d3 P. s4 w0 \
1 W- b1 d% H4 `% `& f* d最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
! d1 s8 \& Z' R' Y( [" H( V M+ @5 r r! ^ C7 P, F& x, q d
这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
7 J, m1 M$ X4 e
7 ~7 M- G; b/ u , W4 X0 Z4 ]% j. e1 v3 i$ o3 [- C
, `3 Z0 a" M( e O. v& b9 cclear
/ K8 p' { I K) I' X* lclc
' t) ?; ?2 q }# I S# y/ _close all* M' e, z; p& X8 @' L
load time_volume_data.mat%载入数据" J2 p- ^& t! B& V
%把站点流量按天按时段写入excel文件
f+ g9 k2 I9 o5 T# _- Jm=1;
8 a( ?; Y0 v$ tday=1;
7 H; i# I$ S! U8 u* j, Ifor n=1:2880; g$ H. P/ } ~" i# H g
eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);$ d# i' R, @% l
if m==96
1 d7 H1 w7 u/ j# o" A m=0;
5 m( T: b7 o, x. f end
: h( J% @: n- C' L; J6 V* d if mod(n,96)==09 W5 V1 l H: T( S
day=day+1;
( P: G4 Z& x- p. F H! [ end
6 e9 ]$ c3 Y" ]8 Y" K m=m+1;# r/ f9 H" c0 ]/ H- W
end; X' M' m" r3 p( \$ V
以上,希望大家eval用的愉快! |
|