De 123456 a 0000012345 con Transform()

De 123456 a 0000012345 con Transform()

Postby FiveWiDi » Fri Sep 27, 2024 4:53 pm

Hola a todos,

Debo estar un poco espeso.

Si tengo nMivalor := 12345
con Transfrom( nMiValor, "@Z 9999999999" ), no debería obtener 0000012345 ?

No sé que hago mal.

¿Cómo se hace?

Muchas gracias.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: De 123456 a 0000012345 con Transform()

Postby karinha » Fri Sep 27, 2024 5:05 pm

Code: Select all  Expand view  RUN

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL nMivalor := 12345

   ? STRZERO( nMivalor, 12, 2 )

RETURN NIL

// FIN / END
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: De 123456 a 0000012345 con Transform()

Postby karinha » Fri Sep 27, 2024 5:48 pm

OR,

Code: Select all  Expand view  RUN

   ? XPADL( ALLTRIM( STRZERO( nMiValor,12,0 ) ), 12 )
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: De 123456 a 0000012345 con Transform()

Postby Armando » Sat Sep 28, 2024 2:51 pm

Carlos:

El picture "@Z" precisamente elimina los ceros a la izquierda, si quieres que se muestren
utiliza la función StrZero().

Saludos



FiveWiDi wrote:Hola a todos,

Debo estar un poco espeso.

Si tengo nMivalor := 12345
con Transfrom( nMiValor, "@Z 9999999999" ), no debería obtener 0000012345 ?

No sé que hago mal.

¿Cómo se hace?

Muchas gracias.
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: De 123456 a 0000012345 con Transform()

Postby FiveWiDi » Sat Sep 28, 2024 4:31 pm

Creo que lo voy a resolver así:

Code: Select all  Expand view  RUN
// Permite indicar como PICTURE "@E 999,999,999.99", "PZ@E 999,999,999.99", "PZ999999", etc.
// 27/09/2024
FUNCTION Mi_Transform( nValue, cPicture )

Local cString   := ""
Local lPutZeros := .F.

If At( "PZ", cPicture ) = 1
    cPicture := SubStr( cPicture, 3 )
    lPutZeros := .T.
EndIf

cString := Transform( nValue, cPicture )

If lPutZeros
    cString := StrTran( cString, " ", "0" )
EndIf

Return cString
/* *********************************************************************************** */


En el código donde tengo Transform() pondré Mi_Transform() modificando el PICTURE.

Evidentemente no es perfecta, pero me servirá.

Y ya está, chimpum.

Muchas gracias a todos
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: De 123456 a 0000012345 con Transform()

Postby Armando » Sat Sep 28, 2024 5:57 pm

Amigo Carlos:

Algo más simple

Code: Select all  Expand view  RUN

   ? "PZ" + StrZero(12500.10,12,2)
 


Donde: 12500.10 es el valor y 12,2 determina los enteros y decimales

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: De 123456 a 0000012345 con Transform()

Postby FiveWiDi » Sun Sep 29, 2024 9:34 pm

Armando wrote:Amigo Carlos:

Algo más simple

Code: Select all  Expand view  RUN

   ? "PZ" + StrZero(12500.10,12,2)
 


Donde: 12500.10 es el valor y 12,2 determina los enteros y decimales

Saludos


Gracias Armando,

Pero no es eso.

Lo que persigo es que con un TransForm() (o algo parecido) pueda generar una respuesta de este tipo: '000025'.

Utilizo TransForm() en una rutina que recibe campos de diferentes DBF (indicados en un fichero TXT) y si son del tipo "N" automáticamente aplico TransForm() con un PICTURE que también se indica en ese TXT; por tanto no puedo discernir si al campo recibido del tipo "N" le debo aplicar TransForm() o las otras soluciones que me proponéis.
Es mucho más fácil 'crear' un nuevo PICTURE (PZloquesea) y que Mi_Transform() lo gestione y que acepte también los propios de Transfrom().

Gracias de nuevo.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: De 123456 a 0000012345 con Transform()

Postby carlos vargas » Mon Sep 30, 2024 1:34 am

Si,hay un picture que hace el mismo trabajo que strzero
@L
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: De 123456 a 0000012345 con Transform()

Postby FiveWiDi » Fri Oct 04, 2024 7:09 pm

carlos vargas wrote:Si,hay un picture que hace el mismo trabajo que strzero
@L


Muchisímas gracias Carlos,

He obviado mi función, con lo que indicas tengo suficiente.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 20 guests