|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
" Q; @& Y1 y# X e2 }
eval的功能简单来说就是可以把字符串当做命令来执行,
1 g7 ], H2 t7 [& o) Z, T3 ^+ r; d: m* x9 Y# T6 j4 b
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:8 o+ V: F9 G2 `
4 B6 S9 P3 h, M0 k6 r+ T# H8 ueval('y=sin(1)')与命令 y=sin(1)等价
5 B8 Q: b+ j& W; A7 k2 I' m$ Y
8 H7 m# l) y& T5 i3 femmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是 这不是自讨无趣吗,直接打命令不是更简单吗?
2 m1 \& a, W! n( G6 ^1 x; K
$ h/ q+ v) C# h最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:0 q6 K* p8 V$ r! G
9 c% K7 g6 f; a# x
eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,
( o7 m; P2 G' P
# Z7 [ B! @0 v" f( e/ a* W当然你可以写三行:! k* B6 b6 Q* {6 |
H& p4 A% t! M w! S6 S
xlswrirte('data1.xlsx',data1)0 s" m) V7 p8 D2 [. [
) j5 B& @1 ?+ T4 n2 Wxlswrirte('data2.xlsx',data2)
$ M- M9 O. Q* {0 W: P) q
& z* h& K7 i# U2 A$ Gxlswrirte('data3.xlsx',data3)
2 {# m* ^' W; Q+ ^' ]! V) L2 {% O- y8 l+ i& X7 d+ `9 Y
但是假如现在有1000个这种data1,data2,...,data1000呢9 c1 W1 y8 ?" L+ H% U7 K
8 g8 X, Z2 w: Z8 R这个时候就需要eval出马了,我们也可以只用三行:. _7 J) z8 J# {# H; U
; l/ b& H7 x, l2 c6 a0 Sfor i=1:10007 r6 I- U' f \4 q5 T
8 D% ]/ G: P+ f/ seval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
; ~( n8 n4 T% s" t6 @; T! E y @
end
: Z- g# ^3 l% Y2 x; @$ y) T
/ C; D& \ O; a' N; |0 k6 f! s) U%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
- R2 W1 x# u9 h5 d. j' t6 @. M- Q
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况! O" l' Z+ S! ], R7 d q& ^
0 r- F; T5 h/ c; F% `7 H3 T
最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:
, }+ Y; J! d" `2 L
5 A' I% J# i' A9 y3 m, ]. ~这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
3 Q- W5 x& ^- R
' ~, M0 m2 y; P9 F
3 }. Q' |1 R; g& K- ?9 Z1 Q1 n4 u$ A; W" s2 `
clear8 b4 V" M0 b- F; p Z0 t ^
clc7 z! S1 m& t0 w. E. I
close all
' w5 ^$ \- i6 |2 `5 O$ Tload time_volume_data.mat%载入数据
* t0 [) [. n# E%把站点流量按天按时段写入excel文件0 R, R% z. ~* R
m=1;
& ?0 e1 x1 a, { I1 ~+ Q2 Aday=1;3 w2 M4 z$ a/ V
for n=1:2880! U5 x& p7 j1 d
eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);0 a0 W* L; q# O- A$ ]
if m==96
C9 J& @/ }- ]. M6 f m=0;
! K; M3 Z1 U z: ] end2 \ N; g! x) x, f, Z- M
if mod(n,96)==0
: ~1 C$ ]5 o' O% h day=day+1;
# E1 ~7 @* Q3 v* m! g3 ^- C& \% |" E1 L end: o+ S2 f3 V% |8 _3 v3 F6 x
m=m+1;* J$ P$ K7 i- M, l/ u
end$ g% x9 \: {7 v9 e/ I! b! T8 }3 N
以上,希望大家eval用的愉快! |
|