EDA365电子论坛网

标题: matlab中eval用法 [打印本页]

作者: ulppknot    时间: 2020-12-21 18:47
标题: matlab中eval用法
. J/ P! M1 `3 Q
eval的功能简单来说就是可以把字符串当做命令来执行,; B: D" j- C* d! k

4 l! _7 m; _8 ?! i4 V2 S. |之前没用到的时候对这句话不太懂,百度了一下,看到有人举的例子:# b, J  w. Z" Z5 w* C

( s, x% l4 H! |2 \3 {eval('y=sin(1)')与命令 y=sin(1)等价
3 D4 i& T4 F( B9 B! \4 j
" n$ X/ Y4 n0 Yemmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是  这不是自讨无趣吗,直接打命令不是更简单吗?  _3 A& Y9 @+ ?; l% A& b

. Z8 h) [6 k9 h% c1 S2 B" Z最近需要把数据按天按时段导出excel我才仔仔细细地研究了一下eval函数的具体用法,真的好用!也指出了遇到的坑,帮助后面像我一样的小白:
1 }6 u1 |& h. |: ^) D
7 i0 `$ d6 w* v* \  S4 e" \eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,! ~$ g9 N. x2 n& X" }! p) J; X1 C
! b) x1 z6 \* O) M* `: p
当然你可以写三行:) D5 r% E# Q/ o5 `$ u5 V
$ K6 m- J9 ^% J% I3 a" o5 a
xlswrirte('data1.xlsx',data1)
- \/ v) n: X4 D; r2 A; i7 k# l- E' o+ E8 ?9 R. e
xlswrirte('data2.xlsx',data2)
' B" I, O+ p  y0 [2 Q, t; l  Y0 c
xlswrirte('data3.xlsx',data3)
' m. R- R* _+ D" Q7 ]( r* n% E2 X5 O9 ]& o
但是假如现在有1000个这种data1,data2,...,data1000呢
, x4 q/ n1 n; C# Q& u7 Z8 R6 s% M
这个时候就需要eval出马了,我们也可以只用三行:% g4 N1 A. n0 z1 l; S
6 l0 S! z' _% \$ U' k
for i=1:1000, F  Q* I5 y( T9 g( H, H* _

) \/ e( _  r  Y) T: I7 v' N  @8 Neval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
, t' M# [3 D, j8 A2 m$ E: D/ j' s# i3 i2 h4 `& K8 O
end
3 ]5 j( v( B1 d1 {
' v& K' X7 e# o* q( m* ]. H4 o: q$ j%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!  V# F8 G# V$ f' y$ |
1 R  r/ {0 f, [* r* y/ I8 O
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况, r' @0 H& \$ F1 x. F0 U  H- u

; p& z) b. P8 R0 ]最后放一个我用来分表写入excel的实例吧,看起来复杂一点但是道理都是一模一样的:9 ^# z  F9 {/ l6 k$ p
8 K! w$ i% q( t% E% a( @
这个是把2880个变量(15min一个,一天96个,30天2880个,按时间顺序已排好序)每96个变量一个excel,每个变量一个sheet:2 b8 g9 y* j" }  s8 I/ }' s
" f+ n6 M+ x$ H  q! ?

) x/ q$ c8 @2 E0 G% \4 O
* B! q4 T; q" L  h, _3 Q( J; Rclear4 [8 o: n3 M0 ?0 F
clc6 W9 z/ T' @% C2 w/ z& y. t. J
close all; u8 s9 T/ b. _5 F7 q0 c
load time_volume_data.mat%载入数据
8 t# `: U, t" `* s1 P9 e" I3 @%把站点流量按天按时段写入excel文件- Y# M( h2 Z" J6 n) ~1 a. R
m=1;
4 s4 V# {+ `7 [9 G4 {, Q0 ]% v: rday=1;
. {4 m* ?( U8 r/ ?, _for n=1:2880
2 A+ O) d: K, K& S" I  @% @7 t    eval(['xlswrite(''data',num2str(day),'.xlsx''',',','data',num2str(n),',','''sheet',num2str(m),''')']);
" d  E/ l& @8 v7 B    if m==96# U! _1 Z0 }9 r
        m=0;
1 R. j' i$ \  Q# n; \2 E7 A! S- f    end* V# f% b" z$ o7 d$ n( U
    if mod(n,96)==0
+ R( i4 T1 r1 `8 p9 b2 }        day=day+1;
8 h# R9 f3 _( B$ ^    end3 d) N9 _$ E. V; x
    m=m+1;  x: k: ^/ f3 t. H  T
end
. q  j: ?2 h# ?以上,希望大家eval用的愉快!
作者: yin123    时间: 2020-12-21 18:59
matlab中eval用法




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2