TRACE32:实践脚本:遍历变量列表
TRACE32: PRACTICE Script: Iterating over a list of variables
在 PRACTICE 脚本中,是否有一种简单的方法来迭代“variables/macros 的列表”?例如:
; this "list" changes...
PRIVATE &var1 &var2 &var3
; this implementation shall not change
; do something with &var1 &var2 &var3 ...
我希望能够添加变量,而无需触及迭代变量的代码。
我假设您正在考虑应该处理可变数量参数的子例程或单独的脚本。由于宏在执行时被展开,被调用者将看不到宏,而只能看到它们的内容。所以被调用者看到的是 space 分隔值的列表。您可以编写一个子例程,将参数解析为一个字符串,然后使用 STRing.SPLIT() 将它们分开。示例:
PRINT "Print 1 item:"
GOSUB PrintItems ONE
PRINT "Print 3 items:"
GOSUB PrintItems ONE TWO THREE
ENDDO
PrintItems:
PRIVATE &list &count
ENTRY %LINE &list
&count=STRing.COUNT("&list"," ")+1
&index=0
RePeat
(
PRIVATE &item
&item=STRing.SPLIT("&list"," ",&index)
PRINT "&item"
&index=&index+1
)
WHILE &index<&count
RETURN
输出:
Print 1 item:
ONE
Print 3 items:
ONE
TWO
THREE
也可以使用其他分隔字符,通过替换 STRing.COUNT() 和 STRing.SPLIT() 中的空白,当然也可以在子程序调用中使用。
在 PRACTICE 脚本中,是否有一种简单的方法来迭代“variables/macros 的列表”?例如:
; this "list" changes...
PRIVATE &var1 &var2 &var3
; this implementation shall not change
; do something with &var1 &var2 &var3 ...
我希望能够添加变量,而无需触及迭代变量的代码。
我假设您正在考虑应该处理可变数量参数的子例程或单独的脚本。由于宏在执行时被展开,被调用者将看不到宏,而只能看到它们的内容。所以被调用者看到的是 space 分隔值的列表。您可以编写一个子例程,将参数解析为一个字符串,然后使用 STRing.SPLIT() 将它们分开。示例:
PRINT "Print 1 item:"
GOSUB PrintItems ONE
PRINT "Print 3 items:"
GOSUB PrintItems ONE TWO THREE
ENDDO
PrintItems:
PRIVATE &list &count
ENTRY %LINE &list
&count=STRing.COUNT("&list"," ")+1
&index=0
RePeat
(
PRIVATE &item
&item=STRing.SPLIT("&list"," ",&index)
PRINT "&item"
&index=&index+1
)
WHILE &index<&count
RETURN
输出:
Print 1 item:
ONE
Print 3 items:
ONE
TWO
THREE
也可以使用其他分隔字符,通过替换 STRing.COUNT() 和 STRing.SPLIT() 中的空白,当然也可以在子程序调用中使用。