3rn3st0
unread,Mar 25, 2009, 3:12:05 PM3/25/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Mundo Visual FoxPro
Muchas veces tenemos la necesidad de generar números enteros los
cuales deben ser "rellenados" con ceros a la izquierda, para un número
de serie, por ejemplo, para un correlativo, etc.
Aquí les dejo el código de una función que escribí hace poco. Primero
está una versión completa y comentada luego una versión mucho más
simple, minimalista diría yo.
Usen cualquiera de las dos de la misma manera. Ambas son idénticas en
su funcionamiento.
*-------------------------------------------------------------------------------
* Función : StrZero
* Autor : Ernesto L. Chapon R.
* Fecha : 2009-01-28
* Versión : 1.00.00
* Tipo : String
* Retorna : sZeros, Una cadena de caracteres rellena con ceros a la
izquierda tantas veces como indique el parámetro <iZeros>.
* Parámetros: <iNum> Número que será convertido a cadena de caracteres
y relleno con ceros a la izquierda. Obligatorio.
* <iZeros> Cantidad de ceros con los que será rellena la
cadena a ser retornada.
* Ejemplos :
* StrZero( 9, 6 ) --> "000009"
* StrZero( 34, 6 ) --> "000034"
* StrZero( 12345, 6 ) --> "012345"
* StrZero( 123456, 6 ) --> "123456"
*-------------------------------------------------------------------------------
function StrZero( iNum As Integer, iZeros As Integer ) As String
local sZeros As String
&& Validación de los parámetros
if Vartype( iNum ) <> "N" or Vartype( iZeros ) <> "N"
sZeros = ""
else
&& Determina la cantidad real de ceros a la izquierda
iZeros = iZeros - Len( Alltrim( Str( iNum ) ) )
&& Creación del valor de retorno
sZeros = Replicate( "0", iZeros ) + Alltrim( Str( iNum ) )
endif
return( sZeros )
VERSIÓN SIMPLIFICADA
function StrZero( iNum, iZeros )
return( PadL( Alltrim( Str( iNum ) ), iZeros, "0" ) )
NOTA 1: Quise hacer esta colaboración para ilustrar mejor lo que dije
en la pregunta que hiciera Gerardo sobre si un número es par o impar.
En mi último comentario explicaba los problemas que podrían acarrear
funciones muy simples donde luego la depuración se nos haría harto
difícil. Les dejo a ustedes mismos la opinión sobre cual de las dos
versiones de la función es más legible y por ende más sencilla de
depurar.
NOTA 2: Las declaraciones sobre los tipos de datos en la primera
función tanto para los parámetros como para la propia función los
escribo porque de esta manera el IntelliSense de VFP reconoce mis
funciones y me muestra las ayudas, tal y como lo hace con las
funciones internas de VFP.
Saludos a todos desde Venezuela, espero les sirva este código :-)