Create dynamic variables/Strings

BlitzMax Forums/BlitzMax Beginners Area/Create dynamic variables/Strings

MOBii(Posted 2014) [#1]
is it possible to create variables from withing the program as a scripting language?

${$name} = $data


Henri(Posted 2014) [#2]
Yes. Scripting languages are just text. Also Blitzmax has builtin support for LUA-scripts.

-Henri


MOBii(Posted 2014) [#3]
thanks, but I was hoping on a solution more direct than my thinking:

I want the user to name and set variable themself
so I know the Stringname$ and the datastring$
I want to save em so the user can get it later

My best solution so far is:
I put Stringname$ in a List/Array and the index to the location for the datastring$[index]

the problem with this is to get a string I need to check all Stringname$ to get the index to the datastring$
If Stringname$[n] = "Size" Print "Size = " + datastring$[n]


TomToad(Posted 2014) [#4]
Use TMap. $name is key and $data is value
SuperStrict

Local Map:TMap = New TMap
map.Insert("Name","John")
Map.Insert("Pet","Dog")
Map.Insert("State","California")

Print String(Map.ValueForKey("Name"))
Print String(Map.ValueForKey("Pet"))
Print String(Map.ValueForKey("State"))



Henri(Posted 2014) [#5]
Would TMap Do ? Tmap stores objects (string are object too) like TList , but you can set an ID/key for each object in order to find any spesific object afterwards with this key. ID/key can be anything you desire (int or string. If Int then convert to string).

Example of TMap:
SuperStrict

Local map:TMap = CreateMap()

'Insert some values
Local data:TData

data = New TData
data.name = "Michael"
data.rank = "Officer"
data.personal_id = 3
MapInsert(map, String("one"),data )

data = New TData
data.name = "John"
data.rank = "Secretary"
data.personal_id = 4
MapInsert(map, String("two"),data )

'Search with id. When using custom types you need to tell compiler which type to expect (typecast)
Local my_data:TData = TData(MapValueForKey(map, "one"))

'Check if value was returned
If my_data Then
	Print my_data.name
	Print my_data.rank
	Print my_data.personal_id
Else
	Print "No value found"
EndIf


'Your own type
Type TData
	Field name:String
	Field rank:String
	Field personal_id:Int
End Type


EDIT: Slow
-Henri


MOBii(Posted 2014) [#6]
WOW Thanks both of you

Print String(Map.ValueForKey("Name"))

This I been looking for, for years, it's a dream come true
You made me buy BlitzMAX, Monkey X is for another day..