I have some old VB6 code that I need to convert to Xojo.
How do I convert this?
Global AWISeries(1950 To 2120) As Single
where the index will be a year value in some calculations.
I have some old VB6 code that I need to convert to Xojo.
How do I convert this?
Global AWISeries(1950 To 2120) As Single
where the index will be a year value in some calculations.
Arrays in Xojo always start with 0. You might instead want to use a Dictionary with the year as the Key.
And then use a loop to initialize the keys “1950” etc.?
Use a dictionary, or pairs
for x = 1950 to 2120
MyDictionary.value(x) = somevalue
next
edit: oh… beaten to it while the site was down…
Thanks guys!
you can create an array with ubound 2100.
no problem and don’t mind the 2 KB of memory used for the unused indexes.
[quote]for x = 1950 to 2120
MyDictionary (x) = somevalue
next
[/quote]
If I do this I get the error:
This is not an array but you are using it as one.
I have about 5 similar arrays. Still don’t worry about all the xtra entries?
[quote=305910:@Tim Turner]If I do this I get the error:
This is not an array but you are using it as one.[/quote]
Well that’s what you get for copying and pasting code. Read the doc on Dictionary to learn how to use it.
http://documentation.xojo.com/index.php/Dictionary
I believe with what you’re trying to do, using a Dictionary will save you a lot of headaches over an array.
Edit: Formatting, and additional comment recommending Dictionary.
dim d as new dictionary
for x = 1950 to 2120
d.value(x) = somevalue
next
And what I get for typing from memory, hitting send, and going to make a coffee…
Fixed in situ
AWISeries(170) As Single //1950 To 2120
And call it in the code as
AWISeries(x-1950)
You can also create two functions ad hoc such as
Set :
Public Sub AWISeries(Year as Integer, assigns value as single)
mAWISeries(Year-1950) = value
End Sub
Get:
Public Function AWISeries(Year as Integer) as Single
return mAWISeries(Year-1950)
End Function
mAWISeries as single
is a module or window property.
With this, you will not need to adapt VB calls to the array.
wasting 2000 *4 = 8 KB is not a big issues.
Especially if you never write those entries, the memory pages will never be allocated physically. You just reserved some address space.
It highly depends now what you do whether an array with extra entries, a dictionary or getter/setter methods are the best for performance or memory consumption.