>>* >>* Name : Array Browser >>* : This is a development tool that allows to view an array in the Browse window >>* >>* Note 1 : The colum Name format : <T>_<C>_<L> >>* T - Column type, V if there are diff types of values in the column >>* C - Column Number >>* L - Max len requered to represent value in this column. >>* Add only in the columns with data types of variable size. >>* >>* Note 2 : The BrowseArrayCursor cursor isn't closed to allow BROWSE NOWAIT >>* >>* Author : Sergey Berezniker >>* : Version 1.0.12 07/26/2007 >>* Email : sergeyber@gmail.com >>* : This program is placed into Public domain. Comments and suggestions are welcome. >>* >>* Change : 19.03.2002 by Daniel Gramunt: Optional parameter < tcCaption > added >>* 03/19/2002 by --SB-- : Modified the BROWSE command to display in the desktop. >>* 04/24/2002 by --SB-- : Fixed problem with the objects in the array. >>* 04/25/2002 by --SB-- : The size isn't added to the column name with fixed size data types in it >>* 07/26/2007 by --SB-- : Fixed bug with SET FIXED ON reported by Agnes Beste on UT >>LPARAMETER taArray, tcCaption >> >>LOCAL lcTalkOld, lcOldArea, lcFixedOld >>LOCAL lnRows, lnCols, lnI, lnJ, lcType, lnSize, ll1d, lnDec, lcRow, llAddSize, lvValue, laStru[1], lcCaption >>lcTalkOld = SET("TALK") >>SET TALK OFF >>lcFixedOld = SET("Fixed") >>SET FIXED OFF >> >>lcOldArea = SELECT() >> >>* Make sure that parameter passed is an array >>IF TYPE("taArray[1]") = "U" >> MessageBox("Please pass array by reference!", 48, PROGRAM() + " - Array Browser") >> SET TALK &lcTalkOld >> RETURN .F. >>ENDIF >> >>lcCaption = IIF(TYPE("tcCaption")="C" AND NOT EMPTY(tcCaption),; >> tcCaption, "BrowseArrayCursor" ) >> >>* Makes a cursor out of a one or two-dimensional array and browses it >> >>* Controls if the MAX size of the value in the column is added >>* to the column name >>llAddSize = .T. >> >>* Figure out the size of an array >>lnRows = ALEN(taArray,1) >>lnCols = MAX( ALEN(taArray,2), 1 ) >>ll1d = (lnCols = 1) && Is array 1D? >>DIMENSION laStru(lnCols+1, 16) >>lcRow = "" >>laStru = "" >> >>* Create an array with cursor structure definition >> >>FOR lnI = 1 TO lnCols >> lcCol = Transform(lnI) >> lvValue = taArray( 1, lni ) >> laStru[ lnI, 1 ] = VARTYPE(lvValue ) >> laStru[ lnI, 2 ] = "C" >> lnSize = 1 >> FOR lnJ = 1 TO lnRows >> IF ll1d >> lvValue = taArray( lnJ ) >> ELSE >> lvValue = taArray( lnJ, lnI ) >> ENDIF >> IF laStru[ lnI, 1 ] <> TYPE( "lvValue" ) >> laStru[ lnI, 1 ] = "V" >> ENDIF >> * --sb-- 04/24/2002 -- Fixed a problem with an object in array element >> lnSize = MAX( lnSize, LEN( B_R_Transform( lvValue))) >> ENDFOR >> >> laStru[ lnI, 1 ] = laStru[ lnI, 1 ] + "_" + lcCol >> * --sb-- 04/25/2002 -- Don't add size if it's fixed for that data type >> IF llAddSize AND NOT Inlist(Left(laStru[ lnI, 1],1), "L", "D", "I", "T", "O", "G") >> laStru[ lnI, 1 ] = laStru[ lnI, 1 ] + "_" + Transform(lnSize) >> ENDIF >> >> lnSize = MIN( 254, lnSize) >> >> laStru[ lnI, 3 ] = lnSize >> laStru[ lnI, 4 ] = 0 >> laStru[ lnI, 5 ] = .F. >> laStru[ lnI, 6 ] = .F. >> >> * Create "insert into" values clause >> * --sb-- 04/24/2002 -- Fixed problem with an object in array element >> lcRow = lcRow + IIF(EMPTY( lcRow ), "", ", ") + ; >> "B_R_Transform( taArray[lnI" + IIF(ll1d, "", "," +lcCol) + "] )" >> >>ENDFOR >> >>lnI = ALEN(laStru,1) >>laStru[ lnI, 1 ] = "Row_______" >>laStru[ lnI, 2 ] = "N" >>laStru[ lnI, 3 ] = 7 >>laStru[ lnI, 4 ] = 0 >>laStru[ lnI, 5 ] = .F. >>laStru[ lnI, 6 ] = .F. >> >>lcRow = lcRow + ", 0" >> >>* Make a cursor with fields defined by laStru >>CREATE CURSOR BrowseArrayCursor FROM ARRAY laStru >> >>* Add rows into cursor >>FOR lnI = 1 TO lnRows >> INSERT INTO BrowseArrayCursor VALUES ( &lcRow ) >>ENDFOR >>REPLACE ALL Row_______ WITH RECNO() >> >>GO TOP >> >>*KEYBOARD "{CTRL+F10}" CLEAR >> >>BROWSE NOWAIT IN SCREEN NORMAL TITLE (lcCaption) >> >>SELECT (lcOldArea) >>SET FIXED &lcFixedOld >>SET TALK &lcTalkOld >> >>RETURN >>*------------------------------------------------------- >>* Function returns "(Obj)" if the passed value is an object >>* otherwise it works like Transform() w/o 2nd parameter >>FUNCTION B_R_Transform(tvVal) >>RETURN Iif(Vartype(tvVal)="O", "(Obj)", Transform(tvVal)) >> >>