FoxPro/Visual FoxPro - Rellenar un numero de ceros por la izquierda ...

 
Vista:

Rellenar un numero de ceros por la izquierda ...

Publicado por Juanma (503 intervenciones) el 06/06/2002 19:26:23
Saludos amigos:
Quisiera rellenar de ceros por la izquierda un número, pero no se como se hace en VFP, en clipper es STRZERO(n,5).
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Rellenar un numero de ceros por la izquierda ..

Publicado por DALSOM (612 intervenciones) el 06/06/2002 21:33:59
EN CARACTERES PADL().
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rellenar un numero de ceros por la izquierda ..

Publicado por Ernesto (8 intervenciones) el 07/06/2002 19:51:37
bueno, yo lo haría de la siguiente forma:

Ej.

Use Tabla In 0
m.Variable = StrTran(Str(Tabla.Campo,5)," ","0")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rellenar un numero de ceros por la izquierda ..

Publicado por JANTOCAL (1 intervención) el 12/11/2007 23:33:13
GRACIAS...............ME SIRVIO LA FUNCION...........

MSDN Library Visual Studio 6.0

PADL(eExpresión, nTamañoResultado [,
cCarácterRelleno])

– o bien –

PADR(eExpresión, nTamañoResultado [,
cCarácterRelleno])

– o –

PADC(eExpresión, nTamañoResultado [, cCarácterRelleno])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Rellenar un numero de ceros por la izquierda ..

Publicado por Juan Carlos (16 intervenciones) el 19/01/2015 18:23:19
en mi caso yo tengo que rellenar de 0 hasta que alcance una longitud de 5 caracteres, para el caso

nombre = 1 y quiero que sea nombre = 00001

Uso PADL(nombre,5,"0") y lo que hace es poner nombre = " 1", lo mismo pasa si pongo con comillas simples el 0 en la funcion.

que sera?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Rellenar un numero de ceros por la izquierda ..

Publicado por Fidel José (558 intervenciones) el 20/01/2015 15:01:54
Mira esta función
? MYPADL( Tuvalor , 5 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
PROCEDURE MYPADL
LPARAMETERS tncValor,tnResultSize,tcPadChar ,tcForcePoint
*!*	-------------------------------------------------------------------
*!*	Prepara tncValor para Padl()
*!*	-------------------------------------------------------------------
*!*	tncValor		Character , Number (Abs(tncValor))
*!*					En otro caso devolverá el TRANSFORM(tncValor)
*!*					Si es Number puede contener decimales
*!*	tnResultSize	Cantidad de dígitos totales enteros
*!*					Si es Number con Decimals se agregan nDec + 1
*!*	tcPadChar		Carácter de relleno (Defalut = "0")
*!*	tcForcePoint	Forzar un separador decimal distinto de SET("Point")
*!*					Por defeto es el valor de SET("Point")
*!*	-------------------------------------------------------------------
 
local lcExtrae, lcType,lcREturn,lcDecimals,lcPoint
 
lcDecimals = ""
lcPoint = SET("Point")
tcForcePoint =EVL(tcForcePoint , lcPoint )
tcPadChar=iif(Vartype(tcPadChar)#"C","0",tcPadChar)
IF VARTYPE(tnResultSize)#"N"
	tnResultSize=0
ENDIF
lcType=Vartype(tncValor)
IF lcType="N"
	tncValor=ABS(tncValor)
	lcDecimals = GETWORDNUM(TRANSFORM(tncValor),2, lcPoint )
	tnResultSize = MAX(tnResultSize ,LEN(GETWORDNUM(TRANSFORM(tncValor),1,lcPOint) ) )
	IF NOT EMPTY(lcDecimals)
		lcDecimals=tcForcePoint + lcDecimals
	ENDIF
ENDIF
lcReturn = ICASE(lcType="N",PADL(transform(int(tncValor)),tnResultSize,tcPadChar),;
				lcType="C",PADL(CHRTRAN(tncValor,CHRTRAN(tncValor,"1234567890",""),""),tnResultSize,tcPadChar),;
				TRANSFORM(tncValor) ) + lcDecimals
 
 
RETURN lcReturn
 
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

RE:Rellenar un numero de ceros por la izquierda ..

Publicado por Juan Carlos (16 intervenciones) el 20/01/2015 15:33:15
Ya vi cual era mi error, es que lo estaba haciendo con la variable del cursor directamente, solo tuve que copiarla a una variable temporal y aplicarle el PADL y funciono.

aaaa lo que es ser novato en Fox y no saber que los cursores se abren por default en modo de solo lectura.

Pero gracias por tu ayuda Fidel Jose
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Rellenar un numero de ceros por la izquierda ..

Publicado por Fidel José (558 intervenciones) el 21/01/2015 00:43:33
Ten cuidado con Padl(). Si la variable es numérica necesitas transformarla para que que el resultado sea correcto:
lcPad = Padl(transform(lnVariable) , 5 , "0")
De otra forma, el resultado te puede sorprender con unos decimales metidos ahí.

Si tu variable es character, siempre conviene
lcPad = PADL( CHRTRAN(lcVariable,Chr(32),"") , 5 , "0")
ó , por lo menos
lcPad = PADL(ALLTRIM(lcVariable), 5, "0")

1) No necesitas pasar el valor de un campo a variable de memoria, sino tratar adecuadamente el valor del campo.
Fijate que ahí conseguiste un truco que te funcionó, pero no tienes una explicación de por qué funciona.
No busques trucos, salvo que no haya otra posibilidad. Trata de encontrar la fundamentación. Visual Fox es demasiado permisivo con algunas cuestiones.

2) Las comillas dobles y simples cumplen exactamente la misma función en Visual Fox. Cuando necesitas conservar un texto encomillado, tienes que recurrir a una de las dos, o te dará error.
lcString = [ 'Tengo una Casa' ]
lcString = ' "Tengo una Casa" '
Pero puedes poner con toda tranquilidad
Thisform.text1.ControlSource=[mitabla.micampo]
Thisform.text2.ControlSource='mitabla.otrocampo'
Thisform.Text3.ControlSource="mitabla.otromas"

lcCadena = [Tengo una casa] +" "+'donde viven 7 perros'
El tema es que el caracter que abre sea el caracter que cierra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rellenar un numero de ceros por la izquierda ..

Publicado por Diego (1 intervención) el 28/01/2016 18:54:59
buenos dias. Buscando algo pareciedo, necesito por favor me den un mano con lo siguiente.
tengo un txt con campos de ancho fijos, y necesito tomar dos campos dentre del total que tiene, y modificarlos, son nros, y necesito sumarle a un valor x a cada campo, en todos los registros.
Hasta ahora tengo subida a una tabla el txt con estos dos campos por separados como numericos, y le pude sumar el valor x, y bajar nuevamente a un txt, el tema es q necesito que me queden los ceros adelantes.
Intente subir el txt a una tabla, con estos campos numericos como char, pero como hago para sumarle el valor x ??
Podrian ayudarme por favor, hay alguna forma que al exportar el txt, esos dos campos numericos se puedan transformar en char y completar con ceros adelante ??
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar