home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / nfsrc21.zip / AEMINLEN.PRG < prev    next >
Text File  |  1991-08-16  |  4KB  |  140 lines

  1. /*
  2.  * File......: AEminlen.prg
  3.  * Author....: Ralph Oliver,  TRANSCOM SYSTEMS
  4.  * CIS ID....: 74030,703
  5.  * Date......: $Date:   15 Aug 1991 23:02:28  $
  6.  * Revision..: $Revision:   1.1  $
  7.  * Log file..: $Logfile:   E:/nanfor/src/aeminlen.prv  $
  8.  * 
  9.  * This is an original work by Ralph Oliver and is placed in the
  10.  * public domain.
  11.  *
  12.  * Modification history:
  13.  * ---------------------
  14.  *
  15.  * $Log:   E:/nanfor/src/aeminlen.prv  $
  16.  * 
  17.  *    Rev 1.1   15 Aug 1991 23:02:28   GLENN
  18.  * Forest Belt proofread/edited/cleaned up doc
  19.  * 
  20.  *    Rev 1.0   07 Jun 1991 23:03:16   GLENN
  21.  * Initial revision.
  22.  *
  23.  *
  24.  */
  25.  
  26.  
  27. /*  $DOC$
  28.  *  $FUNCNAME$
  29.  *     FT_AEMINLEN()
  30.  *  $CATEGORY$
  31.  *     Array
  32.  *  $ONELINER$
  33.  *     Find shortest element within an array
  34.  *  $SYNTAX$
  35.  *     FT_AEMINLEN( <aArray> [, <nDimension> [, <nStart> [, <nCount> ] ] ] )
  36.  *                -> nMinlen
  37.  *  $ARGUMENTS$
  38.  *     <aArray> is the array containing the elements to be measured.
  39.  *
  40.  *     <nDimension> is the array dimension to be measured,
  41.  *                defaults to first dimension.
  42.  *
  43.  *     <nStart> is the starting array element to include,
  44.  *                defaults to first array element.
  45.  *
  46.  *     <nCount> is the number of array elements to process from
  47.  *                from <nStart>, defaults to remaining elements
  48.  *                in array.
  49.  *  $RETURNS$
  50.  *     The length of the shortest size element of an array.
  51.  *  $DESCRIPTION$
  52.  *     This function will measure each element of an array
  53.  *     dimension and return the shortest element.
  54.  *  $EXAMPLES$
  55.  *     FT_AEMINLEN(aArray)       // Measure the 1st dimension of an Array
  56.  *
  57.  *     FT_AEMINLEN(aArray,2)     // Measure the 2nd dimension of an Array
  58.  *
  59.  *     FT_AEMINLEN(aArray,2,,9)  // Measure Elements 1-9 of 2nd dimension
  60.  *
  61.  *     FT_AEMINLEN(aArray,3,5,9) // Measure Elements 5-9 of 3rd dimension
  62.  *
  63.  *     FT_AEMINLEN(aArray,3,5)   // Measure Elements 5 to end of 3rd dimension
  64.  *  $SEEALSO$
  65.  *     FT_AEMAXLEN()
  66.  *  $END$
  67.  */
  68.  
  69. #ifdef FT_TEST
  70.  
  71. FUNCTION MAIN()
  72.    LOCAL var0, myarray1 := DIRECTORY()
  73.    CLS
  74.    ? "TEST TO DEMONSTRATE EXAMPLES OF FT_AEMINLEN"
  75.    ?
  76.    ? "myarray1 = DIRECTORY()"
  77.    ?
  78.    aEval( myarray1, {|v| qout( padr(v[1],12), v[2], v[3], v[4], v[5] ) } ) 
  79.    var0 := FT_AEMINLEN( myarray1 )
  80.    ? PADR('FT_AEMINLEN( myarray1 ) ->',30)
  81.    ?? var0
  82.    ?
  83.    var0 := FT_AEMINLEN( myarray1,2 )
  84.    ? PADR('FT_AEMINLEN( myarray1,2 ) ->',30)
  85.    ?? var0
  86.    ?
  87.    ?
  88.    var0 := FT_AEMINLEN( myarray1[2] )
  89.    ? PADR('FT_AEMINLEN( myarray1[2] ) ->',30)
  90.    ?? var0
  91.    ?
  92.    ?
  93.    var0 := FT_AEMINLEN( myarray1,3 )
  94.    ? PADR('FT_AEMINLEN( myarray1,3 ) ->',30)
  95.    ?? var0
  96.    ?
  97.    RETURN NIL
  98.  
  99. #endif
  100.  
  101.  
  102. FUNCTION FT_AEminlen( aArray, nDimension, nStart, nCount )
  103.  
  104.    LOCAL i, nLast, cType, nMinlen := 65519
  105.  
  106.    // Set default parameters as necessary.
  107.    IF nDimension == NIL
  108.       nDimension := 1
  109.    ENDIF
  110.  
  111.    IF nStart == NIL
  112.       nStart := 1
  113.    ENDIF
  114.  
  115.    IF nCount == NIL
  116.       nCount := LEN( aArray ) - nStart + 1
  117.    ENDIF
  118.  
  119.    nLast := MIN( nStart +nCount -1, LEN( aArray ))
  120.  
  121.    FOR i := nStart TO nLast
  122.       cType := VALTYPE( aArray[i] )
  123.       DO CASE
  124.          CASE ( cType == "C" )
  125.             nMinlen := MIN( nMinlen, LEN( aArray[i] ))
  126.  
  127.          CASE ( cType == "A" )
  128.             nMinlen := MIN( nMinlen, ;
  129.                LEN( LTRIM( TRANSFORM( aArray[i] [nDimension], "@X" ))))
  130.  
  131.          OTHERWISE
  132.             nMinlen := MIN( nMinlen, ;
  133.                LEN( LTRIM( TRANSFORM( aArray[i], "@X" ))))
  134.  
  135.       ENDCASE
  136.    NEXT
  137.  
  138.    RETURN ( nMinlen )
  139.  
  140.