Ir al contenido


Foto

Numeros a letras


  • Por favor identifícate para responder
12 respuestas en este tema

#1 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 09 junio 2009 - 12:39

Saludos a todos

ya se me esta kitando lo vago ultimamente solo entrava al bar


Pregunta Sres

alguien conoce alguna funcion de Mysql o de Rave Reports
que me permita convertir textos en numeros

googleando me encontre con esto
http://forums.mysql....1,165684,166569
pero eso funciona en MS-EXEL
no se si hay algo similar parecido
o identico

ya se delphius mas detalles

estoy haciendo un reporte tipo estado de cuenta
pero me piden que si es posible que
las cantidades monetarias sean tambien mostradas en formato de texto
algo asi como
" $ 1,120.50 "
" UN MIL CIENTO VEINTE PESOS 50/100 M/N "
Estoy usando delphi 7 y rave reports 5.0
mi base de datos de mysql es 4.2

en espera de sus comentarios
GRACIAS

NOTA :
Gracias Ego por cambiar mi nick name este si me gusta



  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 junio 2009 - 01:00

Hola
No te sirve el componente ATexto?.
Saludos
  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 junio 2009 - 01:18

Hola
Te paso el componente y un ejemplo por si te sirve.
Saludos

Archivos adjuntos

  • Archivo adjunto  534_.zip   201,83KB   21 descargas
  • Archivo adjunto  533_.zip   8,08KB   22 descargas

  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 09 junio 2009 - 01:41

De pronto esto te sirve de algo.



delphi
  1. function NumLetra(const mNum: Currency; const iIdioma, iModo: Smallint): String;
  2. const
  3.   iTopFil: Smallint = 6;
  4.   iTopCol: Smallint = 10;
  5.   aCastellano: array[0..5, 0..9] of PChar =
  6.   ( ('UNA ','DOS ','TRES ','CUATRO ','CINCO ',
  7.     'SEIS ','SIETE ','OCHO ','NUEVE ','UN '),
  8.     ('ONCE ','DOCE ','TRECE ','CATORCE ','QUINCE ',
  9.     'DIECISEIS ','DIECISIETE ','DIECIOCHO ','DIECINUEVE ',''),
  10.     ('DIEZ ','VEINTE ','TREINTA ','CUARENTA ','CINCUENTA ',
  11.     'SESENTA ','SETENTA ','OCHENTA ','NOVENTA ','VEINTI'),
  12.     ('CIEN ','DOSCIENTAS ','TRESCIENTAS ','CUATROCIENTAS ','QUINIENTAS ',
  13.     'SEISCIENTAS ','SETECIENTAS ','OCHOCIENTAS ','NOVECIENTAS ','CIENTO '),
  14.     ('CIEN ','DOSCIENTOS ','TRESCIENTOS ','CUATROCIENTOS ','QUINIENTOS ',
  15.     'SEISCIENTOS ','SETECIENTOS ','OCHOCIENTOS ','NOVECIENTOS ','CIENTO '),
  16.     ('MIL ','MILLON ','MILLONES ','CERO ','Y ',
  17.     'UNO ','DOS ','CON ','','') );
  18.   aCatalan: array[0..5, 0..9] of PChar =
  19.   ( ( 'UNA ','DUES ','TRES ','QUATRE ','CINC ',
  20.     'SIS ','SET ','VUIT ','NOU ','UN '),
  21.     ( 'ONZE ','DOTZE ','TRETZE ','CATORZE ','QUINZE ',
  22.     'SETZE ','DISSET ','DIVUIT ','DINOU ',''),
  23.     ( 'DEU ','VINT ','TRENTA ','QUARANTA ','CINQUANTA ',
  24.     'SEIXANTA ','SETANTA ','VUITANTA ','NORANTA ','VINT-I-'),
  25.     ( 'CENT ','DOS-CENTES ','TRES-CENTES ','QUATRE-CENTES ','CINC-CENTES ',
  26.     'SIS-CENTES ','SET-CENTES ','VUIT-CENTES ','NOU-CENTES ','CENT '),
  27.     ( 'CENT ','DOS-CENTS ','TRES-CENTS ','QUATRE-CENTS ','CINC-CENTS ',
  28.     'SIS-CENTS ','SET-CENTS ','VUIT-CENTS ','NOU-CENTS ','CENT '),
  29.     ( 'MIL ','MILIO ','MILIONS ','ZERO ','-',
  30.     'UN ','DOS ','AMB ','','') );
  31. var
  32.   aTexto: array[0..5, 0..9] of PChar;
  33.   cTexto, cNumero: String;
  34.   iCentimos, iPos: Smallint;
  35.   bHayCentimos, bHaySigni: Boolean;
  36.  
  37.   (*************************************)
  38.   (* Cargar Textos según Idioma / Modo *)
  39.   (*************************************)
  40.  
  41.   procedure NumLetra_CarTxt;
  42.   var
  43.     i, j: Smallint;
  44.   begin
  45.     (* Asignación según Idioma *)
  46.  
  47.     for i := 0 to iTopFil - 1 do
  48.       for j := 0 to iTopCol - 1 do
  49.         case iIdioma of
  50.           1: aTexto[i, j] := aCastellano[i, j];
  51.           2: aTexto[i, j] := aCatalan[i, j];
  52.         else
  53.           aTexto[i, j] := aCastellano[i, j];
  54.         end;
  55.  
  56.     (* Asignación si Modo Masculino *)
  57.  
  58.     if (iModo = 1) then
  59.     begin
  60.       for j := 0 to 1 do
  61.         aTexto[0, j] := aTexto[5, j + 5];
  62.  
  63.       for j := 0 to 9 do
  64.         aTexto[3, j] := aTexto[4, j];
  65.     end;
  66.   end;
  67.  
  68.   (****************************)
  69.   (* Traducir Dí­gito -Unidad- *)
  70.   (****************************)
  71.  
  72.   procedure NumLetra_Unidad;
  73.   begin
  74.     if not( (cNumero[iPos] = '0') or (cNumero[iPos - 1] = '1')
  75.       or ((Copy(cNumero, iPos - 2, 3) = '001') and ((iPos = 3) or (iPos = 9))) ) then
  76.       if (cNumero[iPos] = '1') and (iPos <= 6) then
  77.         cTexto := cTexto + aTexto[0, 9]
  78.       else
  79.         cTexto := cTexto + aTexto[0, StrToInt(cNumero[iPos]) - 1];
  80.  
  81.     if ((iPos = 3) or (iPos = 9)) and (Copy(cNumero, iPos - 2, 3) <> '000') then
  82.       cTexto := cTexto + aTexto[5, 0];
  83.  
  84.     if (iPos = 6) then
  85.       if (Copy(cNumero, 1, 6) = '000001') then
  86.         cTexto := cTexto + aTexto[5, 1]
  87.       else
  88.         cTexto := cTexto + aTexto[5, 2];
  89.   end;
  90.  
  91.   (****************************)
  92.   (* Traducir Dí­gito -Decena- *)
  93.   (****************************)
  94.  
  95.   procedure NumLetra_Decena;
  96.   begin
  97.     if (cNumero[iPos] = '0') then
  98.       Exit
  99.     else if (cNumero[iPos + 1] = '0') then
  100.       cTexto := cTexto + aTexto[2, StrToInt(cNumero[iPos]) - 1]
  101.     else if (cNumero[iPos] = '1') then
  102.       cTexto := cTexto + aTexto[1, StrToInt(cNumero[iPos + 1]) - 1]
  103.     else if (cNumero[iPos] = '2') then
  104.       cTexto := cTexto + aTexto[2, 9]
  105.     else
  106.       cTexto := cTexto + aTexto[2, StrToInt(cNumero[iPos]) - 1]
  107.         + aTexto[5, 4];
  108.   end;
  109.  
  110.   (*****************************)
  111.   (* Traducir Dí­gito -Centena- *)
  112.   (*****************************)
  113.  
  114.   procedure NumLetra_Centena;
  115.   var
  116.     iPos2: Smallint;
  117.   begin
  118.     if (cNumero[iPos] = '0') then
  119.       Exit;
  120.  
  121.     iPos2 := 4 - Ord(iPos > 6);
  122.  
  123.     if (cNumero[iPos] = '1') and (Copy(cNumero, iPos + 1, 2) <> '00') then
  124.       cTexto := cTexto + aTexto[iPos2, 9]
  125.     else
  126.       cTexto := cTexto + aTexto[iPos2, StrToInt(cNumero[iPos]) - 1];
  127.   end;
  128.  
  129.   (**************************************)
  130.   (* Eliminar Blancos previos a guiones *)
  131.   (**************************************)
  132.  
  133.   procedure NumLetra_BorBla;
  134.   var
  135.     i: Smallint;
  136.   begin
  137.     i := Pos(' -', cTexto);
  138.  
  139.     while (i > 0) do
  140.     begin
  141.       Delete(cTexto, i, 1);
  142.       i := Pos(' -', cTexto);
  143.     end;
  144.   end;
  145.  
  146. begin
  147.   (* Control de Argumentos *)
  148.  
  149.   if (mNum < 0.00) or (mNum > 999999999999.99) or (iIdioma < 1) or (iIdioma > 2)
  150.     or (iModo < 1) or (iModo > 2) then
  151.   begin
  152.     Result := 'ERROR EN ARGUMENTOS';
  153.     Abort;
  154.   end;
  155.  
  156.   (* Cargar Textos según Idioma / Modo *)
  157.  
  158.   NumLetra_CarTxt;
  159.  
  160.   (* Bucle Exterior -Tratamiento Céntimos-    *)
  161.   (* NOTA: Se redondea a dos dí­gitos decimales *)
  162.  
  163.   cNumero := Trim(Format('%12.0f', [Int(mNum)]));
  164.   cNumero := StringOfChar('0', 12 - Length(cNumero)) + cNumero;
  165.   iCentimos := Trunc((Frac(mNum) * 100) + 0.5);
  166.  
  167.   repeat
  168.     (* Detectar existencia de Céntimos *)
  169.  
  170.     if (iCentimos <> 0) then
  171.       bHayCentimos := True
  172.     else
  173.       bHayCentimos := False;
  174.  
  175.     (* Bucle Interior -Traducción- *)
  176.  
  177.     bHaySigni := False;
  178.  
  179.     for iPos := 1 to 12 do
  180.     begin
  181.       (* Control existencia Dí­gito significativo *)
  182.  
  183.       if not(bHaySigni) and (cNumero[iPos] = '0') then
  184.         Continue
  185.       else
  186.         bHaySigni := True;
  187.  
  188.       (* Detectar Tipo de Dí­gito *)
  189.  
  190.       case ((iPos - 1) mod 3) of
  191.         0: NumLetra_Centena;
  192.         1: NumLetra_Decena;
  193.         2: NumLetra_Unidad;
  194.       end;
  195.     end;
  196.  
  197.     (* Detectar caso 0 *)
  198.  
  199.     if (cTexto = '') then
  200.       cTexto := aTexto[5, 3];
  201.  
  202.     (* Traducir Céntimos -si procede- *)
  203.  
  204.     if (iCentimos <> 0) then
  205.     begin
  206.       cTexto := cTexto + aTexto[5, 7];
  207.       cNumero := Trim(Format('%.12d', [iCentimos]));
  208.       iCentimos := 0;
  209.     end;
  210.   until not (bHayCentimos);
  211.  
  212.   (* Eliminar Blancos innecesarios -sólo Catalán- *)
  213.  
  214.   if (iIdioma = 2) then
  215.     NumLetra_BorBla;
  216.  
  217.   (* Retornar Resultado *)
  218.  
  219.   Result := Trim(cTexto);
  220. end;


  • 0

#5 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 09 junio 2009 - 02:01

no ps si pero hay seria que lo haga del-3.1416

hay modo de que lo haga mysql o rave ?

NOTA IMPORTANTE
Gracias por la pronta respuesta y me resultaran de utilidad los componentes
en otro formulario
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 09 junio 2009 - 02:19

no ps si pero hay seria que lo haga del-3.1416

hay modo de que lo haga mysql o rave ?

NOTA IMPORTANTE
Gracias por la pronta respuesta y me resultaran de utilidad los componentes
en otro formulario


En MySQL "creo" que no es posible, en Rave Reports pues deberí­as hacerlo a puro code en alguno de sus eventos de Valores en QuickReports serí­a OnValue no sé en Rave.

Saludos.
  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 09 junio 2009 - 03:36


no ps si pero hay seria que lo haga del-3.1416

hay modo de que lo haga mysql o rave ?

NOTA IMPORTANTE
Gracias por la pronta respuesta y me resultaran de utilidad los componentes
en otro formulario


En MySQL "creo" que no es posible, en Rave Reports pues deberí­as hacerlo a puro code en alguno de sus eventos de Valores en QuickReports serí­a OnValue no sé en Rave.

Saludos.

Esa es la parte que no me gusta de Rave, que el entorno de programación no esta embebido en delphi, es mas engorroso lograr algo.
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 09 junio 2009 - 03:46

Esa es la parte que no me gusta de Rave, que el entorno de programación no esta embebido en delphi, es mas engorroso lograr algo.


A caray, pero amigo, los eventos de rave son muy buenos, haces cosas muy interesantes con ellos, en breve les mostraré un tutorial de rave para que vean la programación de eventos, y además, habiendo tanto material para delphi acerca de esto de pasar numeros a letras porque meterse con rave :s

Salud OS
  • 0

#9 reevil

reevil

    Member

  • Miembros
  • PipPip
  • 32 mensajes
  • LocationMéxico

Escrito 09 junio 2009 - 08:31


Esa es la parte que no me gusta de Rave, que el entorno de programación no esta embebido en delphi, es mas engorroso lograr algo.


A caray, pero amigo, los eventos de rave son muy buenos, haces cosas muy interesantes con ellos, en breve les mostraré un tutorial de rave para que vean la programación de eventos, y además, habiendo tanto material para delphi acerca de esto de pasar numeros a letras porque meterse con rave :s

Salud OS

:| (y)  gracias desde ahora  :D
  • 0

#10 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 10 junio 2009 - 08:35

yep gracias desde ahora por el tutorial de rave
pero entonce sera mas facil hacerlo desde delphi

pero como puedo pasar variables de delphi a rave ??
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 10 junio 2009 - 09:50

:| (y) gracias desde ahora  :D


Espero que esta misma semana este publicado :).

pero como puedo pasar variables de delphi a rave ??


Debes de  crear variables en rave que puedes asignar desde delphi, no te digo como en este momento porque aun no llego a la instalacion de Delphi en mi lap :s

Tal vez por la tarde, espero que antes alguien ya te dio esta informacion

Salud OS
  • 0

#12 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 10 junio 2009 - 12:10

master caral

ya instale el componente y si pone las letras
nomas una preguntota

como hago para poner la moneda local
esto es pesos y centavos ???


  • 0

#13 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 11 junio 2009 - 05:04

ya kedo ya encontre como usarlo

paso 1
agregar esto al codigo



delphi
  1. function Deletrear(numero: real) : string; var
  2.   letras: TLetras;
  3. begin
  4.   letras := TLetras.Create(nil);
  5.   try
  6.     letras.Numero := numero;
  7.     letras.moneda:= 'Pesos' ; //especifica la moneda
  8.     letras.Centavos := 'centavos';// especifica el nombre de centavos o centimo o lo que manejes en tu pais
  9.     Result := letras.AsString;
  10.   finally
  11.     letras.Free;
  12.   end;
  13. end;



luego agregas un chunchito "TLETRAS"
// componente ya los recorde COMPONENTE "TLETRAS"

ya solo faltaria crear una variable que reciva el texto
y asignarlo al label aki el valor lo saco de un Zquery1 en la fila 14



delphi
  1.               texto:=Deletrear(StrToCurr(Zquery1.Fields[14].Value) );
  2.               label1.Caption:= texto




y como esto no quedo en MYSQL o en RaveRepots
Les agradeceré a los Sres Administradores que lo pasen a GENERAL para que este bien huvicado






  • 0




IP.Board spam blocked by CleanTalk.