KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q186084: HOWTO: Use the _arraylib Class from _utility Class Library

Article: Q186084
Product(s): Microsoft FoxPro
Version(s): WINDOWS:6.0
Operating System(s): 
Keyword(s): 
Last Modified: 11-DEC-1999

-------------------------------------------------------------------------------
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 1986-2002.