Aptech Store

PV structure within procedure

Hey there,

I am writing a procedure that needs to compile the global input into a structure to work further with it.

However, I encounter different errors depending on the approach I try. The main issue I have is that if I define a local variable with the name of the structure, the later definition as a structure is an invalid structure redefinition. If I don't define it as a local variable, I cannot use the pvPack and pvUnpack command since the respective variables weren't initialized.

Please see the example below.

proc (1) = example(data);
local out, subgroups, data_1, data_2;
struct PV subgroups;
struct PV out;
subgroups = pvPack(subgroups, data, "start");
i = 1;
do while i <= rows(subgroups.names);
data_1 = pvUnpack(subgroups, subgroups.names[i]);
...
out = pvPack(out,data_1,subgroups.names[i]);
endo;
retp(out);
endp;

Is there a way to use the pvPack functions within a procedure? Can I somehow call the function without naming the variable before? Or is there another way to add and call elements of a structure within a procedure?

Thanks for any help!

2 Answers



0



accepted

Structures that are declared inside a procedure are local to that procedure. Only weakly typed variables, such as matrices, strings and arrays are declared using the local keyword.

Take a look at this example:

new;
// This is a global structure
struct pv p;
p = pvPack(pvCreate(), 99, "a");
print "The value from GLOBAL 'p' starts =" pvUnpack(p, "a");
// Call proc which sets local 'p'
pvExample(27);
print "The value from GLOBAL 'p' still =" pvUnpack(p, "a");
proc (0) = pvExample(x);
// This 'p' is local
struct pv p;
p = pvPack(pvCreate(), x, "a");
print "The value from LOCAL 'p' = " pvUnpack(p, "a");
endp;

It will return

The value from GLOBAL 'p' starts =  99.000
The value from LOCAL 'p' =   27.000
The value from GLOBAL 'p' still =  99.000 

aptech

1,773


0



Thanks for your quick support!

 

The pvCreate() in the first call of pvPack did the job (Y)

Your Answer

2 Answers

0
accepted

Structures that are declared inside a procedure are local to that procedure. Only weakly typed variables, such as matrices, strings and arrays are declared using the local keyword.

Take a look at this example:

new;
// This is a global structure
struct pv p;
p = pvPack(pvCreate(), 99, "a");
print "The value from GLOBAL 'p' starts =" pvUnpack(p, "a");
// Call proc which sets local 'p'
pvExample(27);
print "The value from GLOBAL 'p' still =" pvUnpack(p, "a");
proc (0) = pvExample(x);
// This 'p' is local
struct pv p;
p = pvPack(pvCreate(), x, "a");
print "The value from LOCAL 'p' = " pvUnpack(p, "a");
endp;

It will return

The value from GLOBAL 'p' starts =  99.000
The value from LOCAL 'p' =   27.000
The value from GLOBAL 'p' still =  99.000 

0

Thanks for your quick support!

 

The pvCreate() in the first call of pvPack did the job (Y)


You must login to post answers.

Have a Specific Question?

Get a real answer from a real person

Need Support?

Get help from our friendly experts.