DOCUMENT:Q186084 11-DEC-1999 [foxpro] TITLE :HOWTO: Use the _arraylib Class from _utility Class Library PRODUCT :Microsoft FoxPro PROD/VER:WINDOWS:6.0 OPER/SYS: KEYWORDS: ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual FoxPro for Windows, version 6.0 ------------------------------------------------------------------------------- SUMMARY ======= Inserting data into or removing data from an array can become a rather tedious programming task. Visual FoxPro 6.0 provides the _arraylib class in the _utility.vcx class library to facilitate inserting data into and removing data elements from arrays. The purpose of this article is to demonstrate use of the _arraylib class. MORE INFORMATION ================ The _arraylib class, included in the _utility.vcx class library, provides two functions for inserting data into and removing data from arrays. The insaitem method allows insertion of data into an array while the delaitem method allows deletion of an element from an array. In both cases, the name of the array is passed, by reference, to the method. The exact syntax is dependent on the method being called and how the method is used. You can use the delaitem method to delete a single array element or an entire row from a multi-dimensional array. The parameters accepted by the delaitem method are: aArray - The name of the array. wziRow - Parameter for the row to be deleted from the array. The name of the array and the row to delete are required parameters. Calls to the delaitem method use the following syntax: THISFORM._arraylib1.delaitem(@array_name,array_row) You use the insaitem method to insert data elements into an array. The parameters accepted by the insaitem method are: aArray - The name of the array. sContents - Contents to insert into the array. iRow - Optional parameter for the row to insert into. lSetAll - Optional parameter for propagating the contents passed in sContents to all columns of the newly inserted row of the array. The name of the array and the value to insert are required parameters. You may pass an optional numeric value in the parameter list indicating in which row to insert the array element. The insaitem method also accepts an optional logical parameter indicating whether or not the value passed in sContents is in all row elements of a multi-dimensional array. Calls to the insaitem method use the following syntax: THISFORM._arraylib1.insaitem(@array_name,array_element[,[irow], [lsetall]]) The code sample below illustrates use of the _arraylib class. 1. Create a program file called Arraylib.prg using the following code: CLOSE ALL SET CLASSLIB TO HOME()+"FFC\_UTILITY.VCX" outilobject=CREATEOBJECT('array_form') outilobject.SHOW READ EVENTS DEFINE CLASS array_form AS FORM TOP = 0 LEFT = 0 HEIGHT = 180 WIDTH = 220 DOCREATE = .T. CAPTION = "_Utilities Demonstration" NAME = "ARRAY_FORM" AUTOCENTER=.T. ADD OBJECT list1 AS LISTBOX WITH ; HEIGHT = 125, ; LEFT=05, ; TOP = 10, ; WIDTH = 100, ; ROWSOURCETYPE=5, ; ROWSOURCE="arraya" ADD OBJECT list2 AS LISTBOX WITH ; HEIGHT = 125, ; LEFT=115, ; TOP = 10, ; WIDTH = 100, ; ROWSOURCETYPE=5, ; ROWSOURCE="arrayb" ADD OBJECT command2 AS COMMANDBUTTON WITH ; LEFT=10, ; HEIGHT=25, ; CAPTION="Close Form", ; TOP=150, ; WIDTH=200, ; NAME = "Command2" ADD OBJECT _arraylib1 AS _arraylib PROCEDURE LOAD PUBLIC arraya, arrayb DECLARE arraya[4] arraya[1]="Apple" arraya[2]="Banana" arraya[3]="Orange" arraya[4]="Pear" DECLARE arrayb[4] arrayb[1]="Blueberry" arrayb[2]="Cherry" arrayb[3]="Grapefruit" arrayb[4]="Strawberry" ENDPROC PROCEDURE list1.CLICK LOCAL thisval thisval=THISFORM.list1.VALUE stringval=arraya[thisval] FOR i=1 TO ALEN(arraya,1) THISFORM.list1.REMOVEITEM(1) ENDFOR THISFORM._arraylib1.insaitem(@arrayb,stringval,thisval-1) THISFORM._arraylib1.delaitem(@arraya,thisval) FOR i=1 TO ALEN(arraya,1) THISFORM.list1.ADDITEM(arraya[i]) NEXT THISFORM.list2.NUMBEROFELEMENTS=ALEN(arrayb,1) THISFORM.REFRESH ENDPROC PROCEDURE list2.CLICK LOCAL thisval thisval=THISFORM.list2.VALUE FOR i=1 TO ALEN(arrayb,1) THISFORM.list2.REMOVEITEM(1) ENDFOR stringval=arrayb(thisval) THISFORM._arraylib1.insaitem(@arraya,stringval) THISFORM._arraylib1.delaitem(@arrayb,thisval) FOR i=1 TO ALEN(arrayb,1) THISFORM.list2.ADDITEM(arrayb[i]) NEXT THISFORM.list1.NUMBEROFELEMENTS=ALEN(arraya,1) THISFORM.REFRESH ENDPROC PROCEDURE command2.CLICK CLEAR EVENTS ENDPROC ENDDEFINE 2. In the Command window enter the following: " DO ARRAYLIB" (without the quotation marks) 3. Click Apple in the first list box and notice that Apple is inserted the first position of the second list box. Click Pear in the first list box and notice that Pear is inserted into the third position of the second list box. This occurs because the numeric position of the array element from arraya passes to the _arraylib1.insaitem with the following syntax: THISFORM._arraylib1.insaitem(@arrayb,stringval,thisval-1) Consequently, the array element from arraya is inserted into arrayb at the same row it had in arraya. 4. Click Blueberry in the second list box noting that Blueberry is inserted at the bottom of the first list box. This occurs because the numeric position of the array element from arrayb is not passing to the _arraylib1.insaitem method using the following syntax: THISFORM._arraylib1.insaitem(@arraya,stringval) Consequently, the array element from arrayb is inserted into the last row of arraya. Additional query words: kbCodeSam kbVFp600 FxprgClassoop ====================================================================== Keywords : Technology : kbVFPsearch kbAudDeveloper kbVFP600 Version : WINDOWS:6.0 Issue type : kbhowto ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 1999.