Hacker’s Guide to Visual FoxPro
An irreverent look at how Visual FoxPro really works. Tells you the inside scoop on every command, function, property, event and method of Visual FoxPro.
AELEMENT()
, ASUBSCRIPT()
These two functions convert between the two numbering schemes for array elements: continuous element numbering and row/column numbering. Because some array functions use one form and others need the other form, these functions are pretty useful.
AELEMENT()
takes an array, a row and, optionally, a column and returns the corresponding element number. ASUBSCRIPT()
takes an array and an element number and returns either the row or the column.
nElement = AELEMENT( ArrayName, nRow [, nCol ] )
Parameter |
Value |
Meaning |
ArrayName |
Array Name |
The array in which you want to convert from row, column notation to element notation. It's necessary to specify the array because the shape of the array determines the conversion. |
nRow |
Numeric |
The row number of the item for which the element number is desired. |
nCol |
Numeric |
The column number of the item for which the element number is desired. |
Omitted |
Treat ArrayName as a one-dimensional array and return nRow. |
|
nElement |
Numeric |
The element number of the specified element. If the array is one-dimensional or nCol is omitted, nRow is returned. |
DIMENSION aTest[5], a2DTest[4,2]
? AELEMENT(aTest, 3) && returns 3
? AELEMENT(a2DTest, 3) && returns 3
? AELEMENT(a2DTest, 3, 2) && returns 6
nSubscript = ASUBSCRIPT( ArrayName, nElement, nSubscript )
Parameter |
Value |
Meaning |
ArrayName |
Array Name |
The array in which you want to convert from element notation to row, column notation. It's necessary to specify the array because the shape of the array determines the conversion. |
nElement |
Numeric |
The element number of the item for which either the row or column number is desired. |
nSubscript |
1 |
Return the row subscript of the element. In a one-dimensional array, this is the same as the element number. |
2 |
Return the column subscript of the element. In a one-dimensional array, gives an error message. |
ASUBSCRIPT()
is particularly useful when working with ASCAN()
, which returns an element number. We often want to get a particular element out of the same row of the array as the element found by ASCAN()
. ASUBSCRIPT()
gives us the row number, which we can then use to grab the relevant item.
Watch out for one thing. When nElement isn’t a valid element number for the array, you get an error. Frankly, we think we’d prefer if ASUBSCRIPT()
returned 0 in that case and let us deal with it.
DIMENSION aTest[5],a2DTest[4,2]
? ASUBSCRIPT(aTest, 3, 1) && returns 3
? ASUBSCRIPT(a2DTest, 3, 1) && returns 2
? ASUBSCRIPT(a2DTest, 3, 2) && returns 1
* The next example assumes SearchItem has a value
* that can be found in the array.
? ASUBSCRIPT(a2DTest, ASCAN(a2DTest, SearchItem), 1)