Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Numbers in letter
Message
De
02/12/1999 14:54:29
 
 
À
02/12/1999 14:47:10
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
00297880
Message ID:
00298099
Vues:
19
Here is my old classlib. It's bilingual, although a bit bigger than it has to be because I failed to use recursion.

**************************************************
* GenCClass.PRG
*
* Code to create a VFP6 class for numeric to verbal (check-style)
* conversion. Uses the ASSIGN method to automatically convert
* new Amount values.
*
* John Koziol, 1998
*
* User Properties:
* Amount (Read/Write - Num) The amount to convert. 0 to 999,999,999.99
* Language (Read/Write - Char) The language to use. Spanish/Espanol or
* English/Ingles
* Verbiage (Read Only - Char) The converted amount in text.
* CError (Read Only - Char) Conversion error text, if error occurs, otherwise blank.
*
* User Methods/Events:
* {None}
*
* Use Examples:
* oChecks=NEWOBJECT("CheckFunctions","gencclass.prg")
* oChecks.Amount=4513.23
* ?oChecks.Verbiage
* "Four Thousand Five Hundred Thirteen Dollars and 23 Cents"
* oChecks.Language="Spanish"
* ?oChecks.Verbiage
* "Cuatro Mil Cinco Cientos Trenta Dolares y 23 Centavos"
*
* Note: WILL NOT RUN in earlier versions of VFP (prior to 6)
*
**************************************************
DEFINE CLASS CheckFunctions AS CUSTOM
HIDDEN LAbbrev,aTens[9],aOnes[9],aTeens[9]
Language ="English"
Amount =0.00
Verbiage =""
CError =""
LAbbrev ="ENG"
PROCEDURE INIT
THIS.SetArrays
RETURN
ENDPROC
HIDDEN PROCEDURE SetArrays
THIS.aTens[1]=IIF(THIS.LAbbrev="ENG","TEN","DIEZ")
THIS.aTens[2]=IIF(THIS.LAbbrev="ENG","TWENTY","VENTE")
THIS.aTens[3]=IIF(THIS.LAbbrev="ENG","THIRTY","TRENTA")
THIS.aTens[4]=IIF(THIS.LAbbrev="ENG","FORTY","CUARENTA")
THIS.aTens[5]=IIF(THIS.LAbbrev="ENG","FIFTY","CINCUENTA")
THIS.aTens[6]=IIF(THIS.LAbbrev="ENG","SIXTY","SESENTA")
THIS.aTens[7]=IIF(THIS.LAbbrev="ENG","SEVENTY","SETENTA")
THIS.aTens[8]=IIF(THIS.LAbbrev="ENG","EIGHTY","OCHENTA")
THIS.aTens[9]=IIF(THIS.LAbbrev="ENG","NINETY","NOVENTA")
THIS.aOnes[1]=IIF(THIS.LAbbrev="ENG","ONE","UN")
THIS.aOnes[2]=IIF(THIS.LAbbrev="ENG","TWO","DOS")
THIS.aOnes[3]=IIF(THIS.LAbbrev="ENG","THREE","TRES")
THIS.aOnes[4]=IIF(THIS.LAbbrev="ENG","FOUR","CUATRO")
THIS.aOnes[5]=IIF(THIS.LAbbrev="ENG","FIVE","CINCO")
THIS.aOnes[6]=IIF(THIS.LAbbrev="ENG","SIX","SEIS")
THIS.aOnes[7]=IIF(THIS.LAbbrev="ENG","SEVEN","SIETE")
THIS.aOnes[8]=IIF(THIS.LAbbrev="ENG","EIGHT","OCHO")
THIS.aOnes[9]=IIF(THIS.LAbbrev="ENG","NINE","NUEVE")
THIS.aTeens[1]=IIF(THIS.LAbbrev="ENG","ELEVEN","ONCE")
THIS.aTeens[2]=IIF(THIS.LAbbrev="ENG","TWELVE","DOCE")
THIS.aTeens[3]=IIF(THIS.LAbbrev="ENG","THIRTEEN","TRECE")
THIS.aTeens[4]=IIF(THIS.LAbbrev="ENG","FOURTEEN","CATORCE")
THIS.aTeens[5]=IIF(THIS.LAbbrev="ENG","FIFTEEN","QUINCE")
THIS.aTeens[6]=IIF(THIS.LAbbrev="ENG","SIXTEEN","DIEZ Y SEIS")
THIS.aTeens[7]=IIF(THIS.LAbbrev="ENG","SEVENTEEN","DIEZ Y SIETE")
THIS.aTeens[8]=IIF(THIS.LAbbrev="ENG","EIGHTEEN","DIEZ Y OCHO")
THIS.aTeens[9]=IIF(THIS.LAbbrev="ENG","NINETEEN","DIEZ Y NUEVE")
RETURN
ENDPROC
HIDDEN PROCEDURE Amount_ASSIGN
LPARAMETERS tAssign
THIS.Verbiage =""
THIS.Amount =0.00
THIS.CError =""
IF !INLIST(TYPE("tAssign"),"N","Y")
THIS.CError="Invalid Amount data type"
ELSE
IF tAssign < 0 OR tAssign > 999999999.99
THIS.CError="Invalid Amount Value...Must be 0 to 999999999.99"
ENDIF
ENDIF
IF EMPTY(THIS.Language)
THIS.CError="Language Not Identified"
ENDIF
IF !EMPTY(THIS.CError)
RETURN
ENDIF
THIS.Amount=tAssign
THIS.MainCalc
RETURN
ENDPROC
HIDDEN PROCEDURE Language_ASSIGN
LPARAMETERS tAssign
THIS.Language=""
THIS.LAbbrev =""
THIS.CError =""
IF !TYPE("tAssign")="C"
THIS.CError="Invalid Language data type"
ELSE
IF !INLIST(LEFT(UPPER(tAssign),3),"ENG","SPA","ESP","ING")
THIS.CError="Cannot identify Language type...Must be English or Spanish"
ELSE
IF INLIST(LEFT(UPPER(tAssign),3),"ENG","ING")
THIS.LAbbrev="ENG"
ELSE
THIS.LAbbrev="SPA"
ENDIF
ENDIF
ENDIF
IF !EMPTY(THIS.CError)
RETURN
ENDIF
THIS.SetArrays
THIS.MainCalc
RETURN
ENDPROC
HIDDEN PROCEDURE MainCalc
cAmount=""
cNum=STR(THIS.Amount,12,2)
cAmount=THIS.CvrtBlock(SUBSTR(cNum,7,3),"")+;
IIF(THIS.LAbbrev="ENG","Dollars and ","Dolares y ")+ALLT(STR(VAL(RIGHT(cNum,2))))+;
IIF(THIS.LAbbrev="ENG"," Cents"," Centavos")
IF VAL(SUBSTR(cNum,4,3)) # 0
cAmount=THIS.CvrtBlock(SUBSTR(cNum,4,3),IIF(THIS.LAbbrev="ENG","Thousand ","Mil "))+cAmount
ENDIF
IF VAL(SUBSTR(cNum,1,3)) # 0
cAmount=THIS.CvrtBlock(SUBSTR(cNum,1,3),IIF(THIS.LAbbrev="ENG","Million ",IIF(VAL(SUBSTR(cNum,1,3))>100,"Milliones ","Millione ")))+cAmount
ENDIF
THIS.Verbiage=cAmount
THIS.CError=""
RETURN
ENDPROC
HIDDEN PROCEDURE CvrtBlock
LPARAMETERS cBlock,cBlockType
cTeens =""
cOnes =""
cTens =""
cHundreds =""
cConverted =""
nBValue = VAL(cBlock)
nTensNOnes = VAL(RIGHT(cBlock,2))
nDigit = VAL(RIGHT(cBlock,1))
nDecade = VAL(SUBSTR(cBlock,2,1))
nCentury = VAL(LEFT(cBlock,1))
IF nTensNOnes # 0
IF BETWEEN(nTensNOnes,11,19)
cTeens=THIS.aTeens[nTensNOnes-10]
ELSE
IF MOD(nBValue,10) # 0
cOnes=THIS.aOnes[nDigit]
ENDIF
IF nDecade # 0
cTens=THIS.aTens[nDecade]+IIF(!EMPTY(cOnes),"-","")
ENDIF
ENDIF
ENDIF
IF nCentury # 0 AND THIS.LAbbrev="ENG"
cHundreds=THIS.aOnes[nCentury]+" Hundred "
ENDIF
IF THIS.LAbbrev="SPA" AND nCentury # 0
IF nBValue=100
cHundreds=" Cien"+IIF(MOD(nBValue,100)#0," ","")
ELSE
IF nCentury # 1
cHundreds=THIS.aOnes[nCentury]+" Cientos"+IIF(MOD(nBValue,100)#0," ","")
ELSE
cHundreds="Ciento"+IIF(MOD(nBValue,100)#0," ","")
ENDIF
ENDIF
ENDIF
cConverted=cHundreds+cTeens+cTens+cOnes+" "+cBlockType
RETURN cConverted
ENDPROC
ENDDEFINE
------------------------------------------------
John Koziol, ex-MVP, ex-MS, ex-FoxTeam. Just call me "X"
"When the going gets weird, the weird turn pro" - Hunter Thompson (Gonzo) RIP 2/19/05
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform