我想用Lauterbach CMM脚本中的宏创建一个数组。
我尝试了以下几点:
LOCAL &ARRAY_VAR[10]这个语法不起作用。
我知道如何用Var.NEWLOCAL创建数组:
Var.NEWLOCAL int[3] \ARRAY_VAR有什么方法可以用数组创建宏吗?
发布于 2019-11-08 14:44:44
简短答案:实践不支持宏数组。
Longer应答:实践可以执行递归宏扩展,这允许您执行与实际数组类似的操作。(见user.pdf中的“实践宏”)
例如:
LOCAL &myarr0 &myarr1 &myarr2 &myarr3
LOCAL &data &i
&data="zero|one|two|three"
// Assign values to &myarra0 to &myarra3 in a loop
&i=0.
WHILE &i<4.
(
PRIVATE &cmd
&cmd="&"+"myarr"+FORMAT.Decimal(1,&i)+"=STRing.SPLIT(""&"+"data"",""|"",&i)"
&&cmd // << evaluate with recursive macro expansion
&i=&i+1.
)
// Print values saved in &myarra0 to &myarra3 in a loop
&i=0.
WHILE &i<4.
(
PRIVATE &val
&val="&"+"myarr"+FORMAT.Decimal(1,&i)
&&val="&val" // << assign with recursive macro expansion
ECHO "&val"
&i=&i+1.
)如果您不关心拥有太多的全局宏,也可以在这样的循环中创建伪数组:
LOCAL &i
&i=0
WHILE &i<4.
(
PRIVATE &cmd
&cmd="GLOBAL "+"&"+"myarr"+FORMAT.Decimal(1,&i)
&cmd
&i=&i+1
)我不会这么做,因为我不喜欢全局宏。
解决方案:使用Var.NEWLOCAL创建数组
例如:
Var.NEWLOCAL char[4][32] \myarr
LOCAL &i &data
&data="zero|one|two|three"
// Assign values to \myarr in a loop
&i=0.
WHILE &i<4
(
PRIVATE &val
&val=STRing.SPLIT("&data","|",&i)
Var.Assign \myarr[&i]="&val"
&i=&i+1.
)
// Print values saved in \myarr in a loop
&i=0.
WHILE &i<4
(
ECHO Var.STRing(\myarr[&i])
&i=&i+1.
)https://stackoverflow.com/questions/58714432
复制相似问题