Home   Archive   Permalink

Setting the value of a variable whose name is from another ...

Second Layer Variables
I figured out how to retrieve the value of a 2nd layer variable. Example:
ProgVars: ["JobID" "JobDesc" "JobRef" etc.]
ProgVars/1 is equal to JobID
ProgVars/2 is equal to JobDesc
Let's say that JobDesc is set to "Build Cabinet".
To retrieve the value of JobDesc I 'do ProgVars/2'
But I can't quite seem to SET the value of ProgVars/2, (ie: set JobDesc "some job desc") without hardcoding "JobDesc" into the program.
I've tried a few things including:
set reduce ProgVars/2 "some job desc" ; but no joy.
How do you set the value of a 2nd layer variable?

posted by:   Gordon Raboud     30-Nov-2014/22:16:44-8:00

I did this on try.rebol.nl :
ProgVars: ["JobID" "JobDesc" "JobRef" etc.]
;ProgVars/1 is equal to JobID
;ProgVars/2 is equal to JobDesc
print ProgVars/2
ProgVars/2: "My new description"
print ProgVars/2
probe progvars
It's output:
My new description
["JobID" "My new description" "JobRef" etc.]
== ["JobID" "My new description" "JobRef" etc.]
Is that what you meant?

posted by:   Arnold     1-Dec-2014/2:39:41-8:00

Hello Gordon,
I want to mention the resource of StackOverflow for programming Q&A:
(This forum is more suited to wandering discussions that StackOverflow forbids.)
It seems what you want is an object, but you aren't using one. You are using a symbolic block of strings, which is a poor fit if your intention is keys and values.
ProgVars: object [JobID: JobDesc: JobRef:]
ProgVars/JobDesc: "My new description"
probe ProgVars
That should give you:
make object! [
     JobID: none
     JobDesc: "My new description"
     JobRef: none

posted by:   Fork     1-Dec-2014/4:56:32-8:00

Thanks for some suggestion. I will go to stackoverflow with any future question.
    I want to keep the variable 'JobDesc', not change it. I want to change the value of 'JobDesc' to be "My new Description" not the value of ProgVars/2. I want to access the names of the variables at ProgVars/x, (1, 2, etc), to use as headers for a table and then the values of the variable whose name is at ProgVars/x to be used in the table body. The header won't change but of course the body of the table changes per row.
Plus the headers change depending on which table I access, so ProgVars/2 won't always be "JobDesc", and that is why if I can set the value of the variable whose name is at ProgVars/2 this one routine will work for all my tables.
Fork: I will try the suggestions in your post. thanks.

posted by:   GordR     1-Dec-2014/7:09:43-8:00

>> ProgVars: [JobID JobDesc JobRef]
== [JobID JobDesc JobRef]
>> JobDesc: "Build Cabinet"
== "Build Cabinet"
>> ProgVars/2
== JobDesc
>> get ProgVars/2
== "Build Cabinet"

posted by:   Nick     1-Dec-2014/10:32:08-8:00

Be sure to use word! values (instead of string! values) in your block, and use 'get to obtain the value of the word.

posted by:   Nick     1-Dec-2014/12:05:26-8:00

Thanks Nick. "get ProgVars/2" makes more sense than "do ProgVars/2".
And my error messages was always something about a "string" and yes I tried to convert to-word! but that was just doing it wrong!    
More to experiment with.

posted by:   GordR     1-Dec-2014/14:25:50-8:00