ColumnCount

PadC(), PadL(), PadR()

These functions pad strings with a specified character. The final letter of each function indicates where the padding occurs: C for center, L for left, and R for right.

Usage

cPaddedString = PADC( eExpr, nLength, cPadCharacter ) cPaddedString = PADL( eExpr, nLength, cPadCharacter ) cPaddedString = PADR( eExpr, nLength, cPadCharacter )

Parameter

Value

Meaning

eExpr

Character, Memo, Numeric, Float, Currency, Double, Integer, Date or DateTime

The item to be padded.

 nLength

Numeric

The length the string should be after padding.

cPadCharacter

Character

The character to use for padding.

Omitted

Spaces (CHR(32)) are used for padding.


Many folks don't notice the third parameter here and think these functions can only be used to pad with blanks. cPadCharacter can be any character at all, so you can use these functions to fill a money amount with "*"s or add a dot leader to an item in a report.

Another thing most folks miss is that you can pass more than just character strings to the PADx functions without first converting them. The conversion is automatic. The number, date or datetime is converted so that it occupies the minimum space possible, then padding is applied.

PADL() is particularly useful when dealing with character strings composed entirely of digits. With PADL(), it's easy to keep them right-justified so they sort properly. If numeric character strings are left-justified, they sort wrong. (For an example, take a look at the SYS() functions in the FoxPro Help index— they list as SYS(1), SYS(10), SYS(11), SYS(100), ... , SYS(2), and so forth.) It's easy to make them sort properly though—just use:

PADL(ALLTRIM(cNumber), LEN(cNumber))       && pads with blanks
or

PADL(ALLTRIM(cNumber), LEN(cNumber), "0")  && pads with zeroes
Either approach yields proper sorting.

PADC() is handy in reporting when you want to center an expression, but the expression length may vary. Apply PADC(), using the size of the allocated space as the length.

Example

PROCEDURE GetId(cTable) * Get a new unique id for the specified table * assumes next id for each table is stored in IdTable   LOCAL nOldWorkArea, cOldOrder, lWasUsed, cRetValue   nOldWorkArea = SELECT() IF USED("IdTable")    lWasUsed=.T.    SELECT IdTable    cOldOrder=ORDER() ELSE    lWasUsed=.F.    SELECT 0    USE IdTable ENDIF   SET ORDER TO TableName   * Find this table SEEK cTable   IF FOUND()    * lock it, grab it and update it    DO WHILE NOT RLOCK()    ENDDO        cRetValue=NextId    REPLACE NextId WITH ;            PADL(INT(VAL(cRetValue))+1,;            LEN(NextId),"0")    UNLOCK RECORD RECNO() ELSE    cRetValue="0000" ENDIF   IF lWasUsed    SET ORDER TO (cOldOrder) ELSE    USE IN IdTable ENDIF   SELECT (nOldWorkArea) ENDIF   RETURN cRetValue
The function shown here returns the next available ID for a specified table. It uses PADL() to ensure that the ID has the right number of digits. It assumes you have a table with two fields, TableName and NextId, with one record for each table in your application. It finds and locks the record for the specified table, grabs NextId, then computes the next NextId before unlocking the record.

There is one thing to watch out for with the PADx() functions. If nLength is less than the current length of cString, all three functions truncate the original string from the right. For example:

?PADL("Original",5)
returns

"Origi"

See Also

Len(), Replicate()


View Updates

Copyright © 2002 by Tamar E. Granor, Ted Roche, Doug Hennig, and Della Martin. All Rights Reserved.



Hacker's Guide to Visual FoxPro 7. 0
Hackers Guide to Visual FoxPro 7.0
ISBN: 1930919220
EAN: 2147483647
Year: 2001
Pages: 899

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net