|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
6 V$ c6 } e+ w! C! veval的功能简单来说就是可以把字符串当做命令来执行,
; W* ?3 `+ V2 J2 Y3 q, b3 }. V8 x) u- W$ ?/ g
之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:
' A# N! t# ~5 \
B* N+ R% [+ C% r1 e6 beval('y=sin(1)')与命令 y=sin(1)等价0 {# b% s. e; E; x1 T, y. Z7 G5 q
: o$ J5 S0 Y- u" }9 n" Temmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是 这不是自讨无趣吗,直接打命令不是更简单吗?
% P6 s6 \1 m4 x7 \5 ?8 @& N! B+ w7 }7 _( o
最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:% K( t" T5 Y1 }
* b5 W4 P; ^- D( Z! T6 J
eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,
* h# L2 R9 [7 ~. `7 V$ e( [# n- G* S$ z; Q7 b) K! Y
当然你可以写三行:% r+ w, p R, x& T+ d0 b3 [
" f9 E0 y Q9 }0 |) {
xlswrirte('data1.xlsx',data1), d0 X+ ^% L/ T: U$ x3 p( |% h9 }
) h3 |9 d1 p( i* exlswrirte('data2.xlsx',data2)3 e' F f' C( x2 U
( _) T) q7 _5 l- M2 [5 \
xlswrirte('data3.xlsx',data3)8 t7 W- k, V+ j+ c$ V
5 Y/ e0 r& L6 x% O' m
但是假如现在有1000个这种data1,data2,...,data1000呢/ s- L) H$ J' J6 Z2 M9 t! _
! H7 A1 |! h S/ C- C6 E这个时候就需要eval出马了,我们也可以只用三行: Q/ }0 R# c% v# R0 c( m3 C
4 i: c/ w9 A# e$ ^/ V
for i=1:1000) N% J/ @# H3 x9 T7 c
; f& A1 V* P% k- z$ o6 M ieval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
% }; y. U2 A5 ^1 k
( K) L7 [0 Y7 Z6 R% M) `! uend4 ~& U' G6 Y$ P; t
; O, L( S$ P% h9 l" I7 C" r
%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!- N( h* C2 t! I' v+ [
8 m/ i0 d: K. W$ w- \, M! |9 F2 _( t
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况
: O) A$ N. B& }9 w9 `' o, T4 f
! A- E& x! v8 J最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:! t r5 w2 l0 v8 Z6 i
" e1 i0 w9 Q6 \8 o! R# ]3 I! [
这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:
7 t9 \! @* ]. {$ v' x
* P2 V3 b+ q3 Y
& w2 c* j6 j7 U7 ]+ I. I
4 {) T7 l$ P vclear6 F$ X# P/ u: C0 U* l( C
clc
: z/ D4 m! m- [1 m- K( |/ s9 Aclose all; D/ k/ E6 d: ?7 z3 L
load time_volume_data.mat%载入数据# A }! U6 U- e* Z
%把站点流量按天按时段写入excel文件; c- t/ C9 I* V' [' [- }& y
m=1;/ ^4 a: c2 z* M" _& d
day=1;
- z) g# ]% x# |7 r' Tfor n=1:28803 J' i2 E3 }8 |& [& K1 P
eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);$ L( A; W- [# I
if m==96% W3 @! T2 g7 \8 o/ B5 h4 A& y
m=0;9 N+ \) j- L2 D4 A
end+ C8 s* W- ^( {2 ^2 q8 W
if mod(n,96)==0' _4 g. K# e8 l
day=day+1;
$ d2 D4 T {5 Y5 i% c4 v& n end
0 B' M' v% O" U& F; J m=m+1;
; v4 M0 | q6 C6 Tend
C8 S+ y% a0 u9 x N1 z以上,希望大家eval用的愉快! |
|