BBS: Inland Empire Archive Date: 04-07-93 (21:22) Number: 335 From: QUINN TYLER JACKSON Refer#: NONE To: MICHAEL BULL Recvd: NO Subj: Redim preserve Conf: (2) Quik_Bas
MB> Quinn, sorry for taking so long. I sat down and had a good
MB> crack at that code you sent this way, but can't get past the
MB> Redim Preserve with my QB45. I hope to be upgrading very soon
MB> to VB, but till then, could you either explain Redim Preserve to
MB> me so I can figure out what it is doing so I can fix it up to do
MB> it, or post some code that handles?
Try this 'un, Michael:
DEFINT A-Z
'
' RedimPreserveXXX
'
' Written by Quinn Tyler Jackson 6 March 1993
'
' Here is an ugly, slow, but otherwise functional work around for
' the PDS/VBDOS REDIM PRESERVE feature. Basically, you can redimension
' an array with this baby, without losing what is already stored within
' the array. I've designed the SUB so that it can be EASILY rewritten
' to accomodate ANY data type, with a few alterations.
'
'
' To rewrite it to handle INTEGER types, for example, change the SUB
' name to RedimPreserveINT and change all cases of "AS STRING" to
' "AS INTEGER". That's all that needs to be changed for it to handle
' INTEGERs. All other datatypes, including user declared TYPEs can be
' accomodated similarly just by changing the three letter suffix and the
' AS declarations to suit the data type you want to be able to handle.
'
' Where you see REDIM PRESERVE SomeArray$(150) in PDS/VBDOS code,
' just substitute RedimPreserveStr SomeArray$(), 150. It ALMOST looks
' the same.
'
' NOTE: This SUB can only act upon DYNAMIC arrays!
'
SUB RedimPreserveStr (Array() AS STRING, NewUpperLimit)
OldBottom = LBOUND(Array)
OldTop = UBOUND(Array)
IF NewUpperLimit = OldTop THEN EXIT SUB'since nothing needs to be done!
IF NewUpperLimit < OldTop THEN ' we'll be shinking the array
Top = NewUpperLimit
ELSE ' we'll be adding blank elements to the end
Top = OldTop
END IF
DIM Temp(OldBottom TO Top) AS STRING
' First, we save the old array's data
FOR i = OldBottom TO Top
Temp(i) = Array(i)
NEXT i
' Then, we REDIM using the old style QuickBASIC destructive REDIM
REDIM Array(OldBottom TO NewUpperLimit) AS STRING
' Finally, we restore the old data to the now empty array....
FOR i = OldBottom TO Top
Array(i) = Temp(i)
NEXT i
' The next line isn't strictly necessary in a SUB, since all DYNAMIC
' arrays are zapped when we exit the SUB, but I'll add it for clarity.
ERASE Temp
END SUB
* OLX 2.1 TD * Pascal is some dead guy and ships sink in the C.
--- Maximus/2 2.01wb
* Origin: The Nibble's Roost, New Westminster BC 604-526-7686 (1:153/918)

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET