Extract a line of text from a character string or memo field

        [<lWrap>]) --> cLine


     <cString> is the memo field or character string from which a line of
     text is to be extracted.

     <nLineLength> specifies the number of characters per line and can be
     between four and 254.  If not specified, the default line length is 79.

     <nLineNumber> is the line number to be extracted.  If not specified,
     the default value is one.

     <nTabSize> defines the tab size.  If not specified, the default
     value is four.  If <nTabSize> is greater than or equal to <nLineLength>,
     then the tab size is automatically converted to <nLineLength> - 1.

     <lWrap> toggles word wrap on and off.  Specifying true (.T.) toggles
     word wrap on; false (.F.) toggles it off.  If not specified, the default
     value is true (.T.).


     MEMOLINE() returns the line of text specified by <nLineNumber> in
     <cString> as a character string.  If the line has fewer characters than
     the indicated length, the return value is padded with blanks.  If the
     line number is greater than the total number of lines in <cString>,
     MEMOLINE() returns a null string ("").

     If <lWrap> is true (.T.) and the indicated line length breaks the line
     in the middle of a word, that word is not included as part of the return
     value but shows up at the beginning of the next line extracted with

     If <lWrap> is false (.F.), MEMOLINE() returns only the number of
     characters specified by the line length.  The next line extracted by
     MEMOLINE() begins with the character following the next hard carriage
     return, and all intervening characters are not processed.


     MEMOLINE() is a memo function used with MLCOUNT() to extract lines of
     text from character strings and memo fields based on the number of
     characters per line.  It is the most basic facility provided by
     Clipper to display memo fields and long strings.

     The basic method of operation is to determine the number of lines in the
     memo field or character string using MLCOUNT() with the same number of
     characters per line, tab size, and wrapping behavior as you intend to
     use with MEMOLINE().  Using this value as the upper boundary of a
     FOR...NEXT, each line of the memo field or character string can be
     extracted with MEMOLINE() and processed with any combination of output
     commands and functions required.


     .  This example demonstrates the general method for displaying
        memo fields and long character strings using the combination of
        MLCOUNT() and MEMOLINE():

        LOCAL nLineLength := 40, nTabSize := 3, lWrap := .T.
        LOCAL nLines, nCurrentLine
        USE Customer INDEX CustName NEW
        nLines := MLCOUNT(CustNotes, nLineLength,;
              nTabSize, lWrap)
        FOR nCurrentLine := 1 TO nLines
           ? MEMOLINE(CustNotes, nLineLength, nCurrentLine,;
                  nTabSize, lWrap)

 Files   Library is EXTEND.LIB.



C5 Data Manipulation Functions

Array :

AADD() :

Add a new element to the end of an array

AADD( <aTarget>, <expValue> ) --> Value


Duplicate a nested or multidimensional array

ACLONE( <aSource> ) --> aDuplicate


Copy elements from one array to another

ACOPY( <aSource>, <aTarget>, [ <nStart> ], [ <nCount> ], 
    [ <nTargetPos> ] ) --> aTarget

ADEL() :

Delete an array element

ADEL( <aTarget>, <nPosition> ) --> aTarget

ADIR()* :

Fill a series of arrays with directory information

ADIR([ <cFilespec> ],
    [ <aFilenames> ],
    [ <aSizes> ],
    [ <aDates> ],
    [ <aTimes> ],
    [ <aAttributes> ] ) --> nFiles


Execute a code block for each element in an array

AEVAL( <aArray>, <bBlock>, [ <nStart> ], [ <nCount> ] ) --> aArray


Fill an array with a specified value

AFILL( <aTarget>, <expValue>, [ <nStart> ], [ <nCount> ] )
       --> aTarget

AINS() :

Insert a NIL element into an array

AINS( <aTarget>, <nPosition> ) --> aTarget


Create an uninitialized array of specified length

ARRAY( <nElements> [, <nElements>...] ) --> aArray


Scan an array for a value or until a block returns (.T.)

ASCAN( <aTarget>, <expSearch>, [ <nStart> ], [ <nCount> ] )
      --> nStoppedAt


Grow or shrink an array

ASIZE( <aTarget>, <nLength> ) --> aTarget


Sort an array

ASORT( <aTarget>, [ <nStart> ], [ <nCount> ], [ <bOrder> ] )
       --> aTarget


Return value of the highest numbered (last) element of an array

ATAIL( <aArray> ) --> Element

Common :


Determine if the result of an expression is empty

EMPTY( <exp> ) --> lEmpty

LEN() :

Return the length of a character string or array size

LEN( <cString> | <aArray> ) --> nCount

MAX() :

Return the larger of two numeric or date values

MAX( <nExp1>, <nExp2> ) --> nLarger
MAX( <dExp1>, <dExp2> ) --> dLarger

MIN() :

Return the smaller of two numeric or date values

MIN( <nExp1>, <nExp2> ) --> nSmaller
MIN( <dExp1>, <dExp2> ) --> dSmaller

PAD() :

Pad character, date or numeric values with a fill character

PADL( <exp>, <nLength>, [ <cFillChar> ] ) --> cPaddedString
PADC( <exp>, <nLength>, [ <cFillChar> ] ) --> cPaddedString
PADR( <exp>, <nLength>, [ <cFillChar> ] ) --> cPaddedString


Convert any value into a formatted character string

TRANSFORM( <exp>, <cSayPicture> ) --> cFormatString

TYPE() :

Determine the type of an expression

TYPE( <cExp> ) --> cType


Determine the data type returned by an expression

VALTYPE( <exp> ) --> cType

Date & Time :

CDOW() :

Convert a date value to a character day of the week

CDOW( <dExp> ) --> cDayName


Convert a date to a character month name

CMONTH( <dDate> ) --> cMonth

CTOD() :

Convert a date string to a date value

CTOD( <cDate> ) --> dDate

DATE() :

Return the system date as a date value

DATE() --> dSystem

DAY() :

Return the day of the month as a numeric value

DAY( <dDate> ) --> nDay

DOW() :

Convert a date value to a numeric day of the week

DOW( <dDate> ) --> nDay

DTOC() :

Convert a date value to a character string

DTOC( <dDate> ) --> cDate

DTOS() :

Convert a date value to a string formatted as yyyymmdd

DTOS( <dDate> ) --> cDate


Convert a date value to the number of the month

MONTH( <dDate> ) --> nMonth


Return the number of seconds elapsed since midnight

SECONDS() --> nSeconds

TIME() :

Return the system time

TIME() --> cTimeString

YEAR() :

Convert a date value to the year as a numeric value

YEAR( <dDate> ) --> nYear

Numeric :

ABS() :

Return the absolute value of a numeric expression

ABS( <nExp> ) --> nPositive

BIN2I() :

Convert a 16-bit signed integer to a numeric value

BIN2I( <cSignedInt> ) --> nNumber

BIN2L() :

Convert a 32-bit signed integer to a numeric value

BIN2L( <cSignedInt> ) --> nNumber

BIN2W() :

Convert a 16-bit unsigned integer to a numeric value

BIN2W( <cUnsignedInt> ) --> nNumber

EXP() :

Calculate e**x

EXP( <nExponent> ) --> nAntilogarithm

INT() :

Convert a numeric value to an integer

INT( <nExp> ) --> nInteger

I2BIN() :

Convert a numeric to a 16-bit binary integer

I2BIN( <nInteger> ) --> cBinaryInteger

LOG() :

Calculate the natural logarithm of a numeric value

LOG( <nExp> ) --> nNaturalLog

L2BIN() :

Convert a numeric value to a 32-bit binary integer

L2BIN( <nExp> ) --> cBinaryInteger

MOD()* :

Return dBASE III PLUS modulus of two numbers

MOD( <nDividend>, <nDivisor> ) --> nRemainder


Return a value rounded to a specified number of digits

ROUND( <nNumber>, <nDecimals> ) --> nRounded

SQRT() :

Return the square root of a positive number

SQRT( <nNumber> ) --> nRoot

VAL() :

Convert a character number to numeric type

VAL( <cNumber> ) --> nNumber

String & Memo :


Remove leading and trailing spaces from character string

ALLTRIM( <cString> ) --> cTrimString

ASC() :

Convert a character to its ASCII value

ASC( <cExp> ) --> nCode

AT() :

Return the position of a substring within a string

AT( <cSearch>, <cTarget> ) --> nPosition

CHR() :

Convert an ASCII code to a character value

CHR( <nCode> ) --> cChar


Replace all soft CRs with hard CRs

HARDCR( <cString> ) --> cConvertedString


Determine if the leftmost character is alphabetic

ISALPHA( <cString> ) --> lBoolean


Determine if the leftmost character is a digit

ISDIGIT( <cString> ) --> lBoolean


Determine if the leftmost character is a lower case letter

ISLOWER( <cString> ) --> lBoolean


Determine if the leftmost character is upper case

ISUPPER( <cString> ) --> lBoolean

LEFT() :

Extract a substring beginning with the first character

LEFT( <cString>, <nCount> ) --> cSubString


Convert uppercase characters to lowercase

LOWER( <cString> ) --> cLowerString


Remove leading spaces from a character string

LTRIM( <cString> ) --> cTrimString


Display or edit character strings and memo fields

MEMOEDIT( [ <cString> ],
    [ <nTop> ], [ <nLeft> ],
    [ <nBottom> ], [ <nRight> ],
    [ <lEditMode> ],
    [ <cUserFunction> ],
    [ <nLineLength> ],
    [ <nTabSize> ],
    [ <nTextBufferRow> ],
    [ <nTextBufferColumn> ],
    [ <nWindowRow> ],
    [ <nWindowColumn> ] ) --> cTextBuffer


Extract a line of text from character string or memo field

MEMOLINE( <cString>,
    [ <nLineLength> ],
    [ <nLineNumber> ],
    [ <nTabSize> ],
    [ <lWrap> ] ) --> cLine


Return the contents of a disk file as a character string

MEMOREAD( <cFile> ) --> cString


Replace carriage return/line feeds in character strings

MEMOTRAN( <cString>,
    [ <cReplaceHardCR> ],
    [ <cReplaceSoftCR> ] ) --> cNewString


Write a character string or memo field to a disk file

MEMOWRIT( <cFile>, <cString> ) --> lSuccess


Count the lines in a character string or memo field

MLCOUNT( <cString>, [ <nLineLength> ],  [ <nTabSize> ],
         [ <lWrap> ] ) --> nLines


Return byte position based on line and column position

MLCTOPOS( <cText>, <nWidth>, <nLine>,
    <nCol>, [ <nTabSize> ], [ <lWrap> ] ) --> nPosition


Determine the position of a line in a memo field

MLPOS( <cString>, <nLineLength>,
     <nLine>, [ <nTabSize> ], [ <lWrap> ] ) --> nPosition


Return line and column position based on byte position

MPOSTOLC( <cText>, <nWidth>, <nPos>,
     [ <nTabSize> ], [ <lWrap> ] ) --> aLineColumn

RAT() :

Return the position of the last occurrence of a substring

RAT( <cSearch>, <cTarget> ) --> nPosition


Return a string repeated a specified number of times

REPLICATE( <cString>, <nCount> ) --> cRepeatedString


Return a substring beginning with rightmost character

RIGHT( <cString>, <nCount> ) --> cSubString


Remove trailing spaces from a character string

RTRIM( <cString> ) --> cTrimString


Toggle exact matches for character strings

SET EXACT on | OFF | <xlToggle>


Convert a character string to soundex form

SOUNDEX( <cString> ) --> cSoundexString


Return a string of spaces

SPACE( <nCount> ) --> cSpaces

STR() :

Convert a numeric expression to a character string

STR( <nNumber>, [ <nLength> ], [ <nDecimals> ] ) --> cNumber


Search and replace characters within a character string

STRTRAN( <cString>, <cSearch>, [ <cReplace> ],
    [ <nStart> ], [ <nCount> ] ) --> cNewString


Delete and insert characters in a string

STUFF( <cString>, <nStart>, <nDelete>, <cInsert> ) --> cNewString


Extract a substring from a character string

SUBSTR( <cString>, <nStart>, [ <nCount> ] ) --> cSubstring

TRIM() :

Remove trailing spaces from a character string

TRIM( <cString> ) --> cTrimString


Convert lowercase characters to uppercase

UPPER( <cString> ) --> cUpperString