Variable value by its name representation as string

By Eugeny_Brychkov

Paragon (1079)

Eugeny_Brychkov의 아바타

06-06-2018, 16:24

I am stuck at the stupidest problem - can not figure out how to get variable value. See the code below

5 a(1)=2:b(1)=10:c(1)=100
10 data "a","b","c"
15 restore 10
20 for i=0 to 2
30 read a$
40 x=... ???
50 print x
60 next i

I define list of variable names using DATA, each of these variables are arrays. I need to take value of a(1) according to read of first string from data, b(1) according to reading second, etc. What ...??? must be to convert a$ being "a" to value of a(1)?

I have a suspicion that it may simply be impossible at BASIC level. Please advise.

Login or 등록 to post comments

By Meits

Scribe (5387)

Meits의 아바타

06-06-2018, 17:42

i deleted line 5 and put its value in line 10 as string, so between quotes. then line 40 became x=val(a$). That gave the following output:
2
10
100

i don't expect the variables in line 5 will go into the strings in line 10.

By Gabbiani

Supporter (13)

Gabbiani의 아바타

06-06-2018, 18:31

I am not an expert with BASIC, but I'd say it is not possible for a BASIC program to evaluate a string as an expression.

By robylu

Supporter (6)

robylu의 아바타

06-06-2018, 19:31

I don't know if i am saying something wrong, but i would convert the "a" in the ascii code with the ASC command and then evaluate the result with an if. Too long way?

By Manuel

Ascended (15365)

Manuel의 아바타

07-06-2018, 00:07

Indeed, strings can't be evaluated as variable names, as far as I know Smile

By Arjan

Paladin (697)

Arjan의 아바타

07-06-2018, 09:58

I guess it should possible by calling some basic interpreter functions, like in the thread below:
https://www.msx.org/forum/msx-talk/development/invoking-the-...

It's easier to just use one multidimensional array and change the data to indexes.

By NYYRIKKI

Enlighted (5270)

NYYRIKKI의 아바타

07-06-2018, 10:31

Nothing really to add here, I think Arjan covered your options... MSX-BASIC does not natively have anything like EXECUTE-command.

Working version of your listing would be:

1 dim d(2,10)
5 d(0,1)=2:d(1,1)=10:d(2,1)=100
10 data 0,1,2
15 restore 10
20 for i=0 to 2
30 read p
40 x=d(p,1)
50 print x
60 next i