Как объявить массив с макросами в скрипте Lauterbach CMM

Я хотел бы создать массив с макросами в скрипте Lauterbach CMM.

Я пробовал следующее:

LOCAL &ARRAY_VAR[10]

Этот синтаксис не работает.

Я знаю, как создать массив с помощью Var.NEWLOCAL:

Var.NEWLOCAL int[3] \ARRAY_VAR

Есть ли способ создать макросы с массивом?


person Penchalaiah Jammula    schedule 05.11.2019    source источник
comment
Привет, Хольгер. Ты хоть представляешь, как я могу объявить массив с частными макросами?   -  person Penchalaiah Jammula    schedule 06.11.2019


Ответы (1)


Краткий ответ: PRACTICE не поддерживает массивы макросов.


Более длинный ответ: PRACTICE может выполнять рекурсивное расширение макроса, что позволяет вам делать что-то похожее, чем настоящие массивы. (См. «Макросы PRACTICE» в Practice_user.pdf)

E.g.:

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.
)

Если вам не нужно слишком много макросов GLOBAL, вы также можете создать псевдомассив в цикле, подобном этому:

LOCAL &i
&i=0
WHILE &i<4.
(
    PRIVATE &cmd
    &cmd="GLOBAL "+"&"+"myarr"+FORMAT.Decimal(1,&i)
    &cmd
    &i=&i+1
)

Я бы не стал этого делать, потому что мне не нравятся ГЛОБАЛЬНЫЕ макросы.


Временное решение: создайте массив с помощью Var.NEWLOCAL

E.g.:

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.
)
person Holger    schedule 08.11.2019