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 Y
emmm看完后虽然懂了基本用法还是一脸懵逼,道理我都懂,但是 这不是自讨无趣吗,直接打命令不是更简单吗?
_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 y
0 [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 N
eval(['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; R
clear
4 [8 o: n3 M0 ?0 F
clc
6 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: r
day=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$ ^
end
3 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