Ejemplos Power Builder 10.5 - baixardoc

10
 EJEMPLOS DE POWER BUILDER 10.5 Este documento contiene muchos ejemplos de script sobre el manejo de aplicaciones y proyectos realizados a base de power builder. Si le interesa aprender este lenguaje de programación este documento posee la mayoría códigos para el desarrollo de sistemas informáticos.  Manejo de Power builder 10.5 

Transcript of Ejemplos Power Builder 10.5 - baixardoc

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 1/36

 

 

EJEMPLOS DE POWER

BUILDER 10.5

Este documento contiene muchos ejemplos de script sobre el manejo de

aplicaciones y proyectos realizados a base de power builder. Si le interesa

aprender este lenguaje de programación este documento posee la mayoría

códigos para el desarrollo de sistemas informáticos. 

Manejo de Power 

builder 10.5 

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 2/36

 

 1

Ejemplos Power builder 10.5

1. LLAMADOS A LAS API DE WINDOWS DESDE POWER BUILDERPower Builder al igual que otros lenguajes de programación, provee la capacidad deextender las posibilidades del lenguaje tomando funcionalidades que pertenecen al

sistema operativo o controles de terceras partes. Este proceso es lo que se llama API(Application Programming Interface). Algunas personas incluyen DLLs que han realizadoen C o C++, para usarlos en Power Builder. Pero los mas comunes llamados son los quese hacen a las API del sistema operativo, para que el programador acceda directamente afunciones que desde power builder tocaría desarrollarlas, y el sistema operativo ya lastiene implementadas.

       COMO SE HACE EL LLAMADOLos llamados a los API se realizan a través de la declaración de funciones externas(External Function), que pueden ser globales o locales. Las Global external function,pueden ser utilizadas en cualquier lugar de la aplicación y son guardadas con otrasvariables globales. las Local external function hacen parte de la definición de una ventana,

un menú, o un objeto de usuario. Ahora en el bloque de código de la external function, definimos la función que deseamosincluir, la cual tiene esta sintaxis:{acceso} FUNCTION tipodedatoqueretorna Nombredelafuncion ({argumentos}) LYBRARYnombredelalibreria {ALIAS FOR nombreexterno}La declaración de acceso solo es valido para las local external functions donde puede ser Public, Private, y Protected. tipodedatoqueretorna es el tipo de dato que retorna lafuncion. Nombredelafuncion es el nombre de la función tal como aparece en el archivoDLL. nombredelalibreria es el nombre del archivo DLL donde la función se encuentra.

 ALIAS FOR nombreexterno es un nombre diferente que se le puede dar a la función parausarla en el power script.

       EJEMPLO DE LLAMADO A UN API DE WINDOWSSi por ejemplo usted necesita copiar un archivo de un directorio a otro, usted puede usar una función que se encuentra en Kernel32.dll llamada CopyFileA. Esta función le permitecopiar un archivo de un sito a otro. Entonces en el bloque de instrucciones donde declaralas Global External Function, coloca este código (o la definición de la función que necesitesegún la tabla):FUNCTION boolean CopyFileA(ref string cfrom, ref string cto, boolean flag) LIBRARYKernel32.dllY luego desde el power script de la ventana o el sitio de la aplicación donde necesitecopiar un archivo, hace el llamado a la función así:string ls_desde, ls_hastaboolean lb_flag, lb_ rtn

lb_flag = falsels_desde = c:prueba.bmpls_hasta = c:directorio est.bmplb_rtn = CopyFileA(ls_desde, ls_hasta, lb_flag)Si desea conocer mas profundamente información acerca de las funciones disponiblesconsulte la pagina web de los APIS de Windows (En Ingles).

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 3/36

 

 2

2. Poner las nuevas filas en otro color Este truco muestra como cuando se inserta una nueva fila se pone de un color diferente, yasi mismo se muestra como hacer para que las filas nuevas sean editables mientras quelas existentes se dejan como solo lectura. Para poner las filas nuevas de un color diferente abra la expresión (expression) del campo de background color coloque lasiguiente sentencia

if ( IsRowNew(), 1090519039, Long(Describe(Datawindow.Color)))donde 1090519039 es color regular de una ventanaUsando la misma idea, se puede hacer que las filas existentes sean de solo lectura y lasnuevas sean editables, el codigo siguiente se coloca en la expresión (expression) deProtect:if ( IsRowNew() , 0 , 1 )

3. Rutina para buscar y remplazar un stringEsta Rutina trabaja genericamente para todos los strings. Por ejemplo si OLD_STR = redy NEW_STR = green, todas las ocurrencias de red serán remplazadoas con green.long ll_StartPos = 1string ls_old_str, ls_new_str, ls_txt_str 

ls_txt_str = sle_1.Textls_old_str = redls_new_str = green// Busca la primera ocurrencia de ls_old_str ...ll_StartPos = Pos(ls_txt_str, ls_old_str, ll_StartPos)

// Unicamente entra al loop si uted busca ls_old_str ...DO WHILE ll_StartPos > 0// Remplaza old_str con ls_new_str ...ls_txt_str = Replace(ls_txt_str, ll_StartPos, Len(ls_old_str), ls_new_str)// Busca la siguiente ocurrencia de ls_old_str ll_StartPos = Pos(ls_txt_str, ls_old_str, ll_StartPos + Len(ls_old_str))

LOOPsle_2.Text = ls_txt_str 

4. Función para encriptar y desencriptar un string  A continuación se presenta la funcion of_encrypt que recibe un string y devuelve lacadena encriptada, y la funcion of_decrypt que recibe una cadena encriptada y ladesencripta. [function string of_encrypt(as_str)]integer i, jstring ls_enctext =CONSTANT string CRYPT_KEY = $#@%&#%@&*

 j = len(as_str)FOR i = 1 TO j

ls_enctext += mid(CRYPT_KEY , mod(i,10) + 1, 1)ls_enctext += String(Char(255 - Asc(Mid(as_str, i, 1))))NEXTRETURN ls_enctext[function string of_decrypt(as_str)]integer i, jstring ls_encchar, ls_temp, ls_unasstr = ** Encryption Error boolean lb_ok = trueCONSTANT string CRYPT_KEY = $#@%&#%@&*

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 4/36

 

 3

 j = len(as_str)IF NOT Mod(j, 2) = 1 THENls_temp =FOR i = 2 TO (j + 1) STEP 2ls_encchar = Mid(as_str, i - 1, 1)

IF mid(CRYPT_KEY, Mod(i / 2, 10) + 1, 1) <> ls_encchar THENlb_ok = FALSEEXITEND IFls_encchar = Mid(as_str, i, 1)ls_temp += string(char(255 - asc(ls_encchar)))NEXTEND IFIF lb_ok THEN ls_unasstr = ls_tempRETURN ls_unasstr 

5. Como agregar animación a las ventanas

ESTA API SOLO ESTA DISPONIBLE EN WINDOWS 98 Y 2000. AGREGA LASIGUIENTE FUNCION EXTERNA:Function boolean AnimateWindow(long lhWnd, long lTm, long lFlags ) library 'user32'DONDE EL PRIMER PARAMETRO ES EL ?HANDLE? DE TU VENTANA, EL SEGUNDOES EL TIEMPO QUE SE DEBE TOMAR PARA LA ANIMACIÓN (MAYOR VALOR =MAYOR LENTITUD EN LA ANIMACIÓN), Y POR ULTIMO EL TIPO DE ANIMACIÓN QUEDESEAS AGREGAR.PARA LLAMAR LA APLICACIÓN, AGREGA EL SIGUIENTE CODIGO AL EVENTOOPEN DE TU VENTANA:// Anima la ventana de izquierda a derechaConstant long AW_HOR_POSITIVO = 1// Anima la ventana de derecha a izquierda

Constant long AW_HOR_NEGATIVO = 2// Anima la ventana de arriba hacia abajoConstant long AW_VER_POSITIVO = 4// Anima la ventana de abajo hacia arribaConstant long AW_VER_NEGATIVO = 8// Anima la ventana haciéndola que aparezca del centro hacia los ladosConstant long AW_CENTRO = 16// Oculta la ventanaConstant long AW_OCULTA = 65536// Activa la ventanaConstant long AW_ACTIVA = 131072// Usa la animación de tipo diapositivas

Constant long AW_DIAP = 262144// Usa la animación con efecto de transparenciaConstant long AW_TRANS = 524288

 AnimateWindow( Handle( this ), 500, AW_TRANS )

6. Crear una tabla desde PowerScriptCon las siguientes instrucciones usted puede crear una tabla desde power script o hacer un cambio a la tabla con alter table. Debe verificar que el autocommit de la transaccióneste en TRUE. SQLCA.AutoCommit = True

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 5/36

 

 4

ls_sql = create table #tmp (abc varchar(255))EXECUTE IMMEDIATE :ls_sql USING SQLCA;//Para modificar la tabla, use la misma idea:ls_sql = 'ALTER TABLE dba.tbl_name ADD col_name'EXECUTE IMMEDIATE :ls_sql USING SQLCA;

7. Cargar un arreglo con todos los nombres de las columnas de un DWEste truco muestra como hacer para obtener los nombres de las columnas de undatawindow, cargandolas a un arreglo. int colNum, numColsstring colName[]numCols = Integer(dw_control.Describe(Datawindow.Column.Count))FOR colNum = 1 TO numCols// Toma el nombre de la columna con describecolName[colNum] = dw_control.Describe(# + String(colNum) + .name)NEXT

8. Como saber cuales dlls usa mi aplicación?Bueno lo que debes hacer es correr tu aplicacion desde el ejecutable (aplicacion.exe),

debes tener cerrado Power builder, y todas las aplicaciones, vas a inicio / ejecutar ybuscas el lugar donde esta el ejecuble y lo corres. Ya cuando tu aplicacion este corriendovas a inicio / ejecutar y escribes msinfo32.exe, este es un utilitario que tiene windows 98,o si usas Office el tambien lo trae. Este es un programa de informacion del sistema que temuestra los programas y dlls que usas actualmente. Ahi entra a entorno de software,modulos de 32 bits cargados, en la parte derecha te va a mostrar un listado de dlls delsistema que corren actualmente, para saber cuales con los que usa tu aplicacion buscalos que el fabricante es Sybase Inc y empiezan por PB*.dll. Ahi encontraras los dlls.

 Ademas de esos hay uno dll que no tine fabricante pero es de sybase tambien que es unollamado libjcc.dll, ahi podras ver el .pbd o .dll de las librerias de tu aplicacion y el .exe dela aplicacion, obviamente estos tambien hacen parte de la aplicacion. Anota todos estosarchivos, y luego crea una carpeta y copia todos estos archivos dentro de la carpeta. Esta

carpeta es la que debes llevar al equipo donde vas a poner a correr la aplicación. Y conesto ya debe correr la aplicacion en el equipo que no tine PB.

9. Sobrecarga del MessageboxMuchas veces se usa la función messagebox para mostrar el valor de una variable.Powerbuilder trae la función messagebox() sobrecargada para que usted pueda llamarlacon cualquier tipo de dato. Normalmente la función tiene estos parámetrosMessageBox ( titulo, texto {, icono {, botón {, default } } } )Donde los parámetros obligatorios titulo y texto son de tipo string. Esto hace que por ejemplo para mostrar una variable de tipo entero se realice esta conversiónInt li_numeroli_numero = 2

messagebox(?titulo mensaje?,string(li_numero))Con la sobrecarga que tiene esta función usted puede hacer estoInt li_numeroli_numero = 2messagebox(?titulo mensaje?, li_numero)obteniendo el mismo resultado

10. Tomar el numero de filas seleccionas en un DW

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 6/36

 

 5

 Algunas veces es necesario contar cuantas filas se han seleccionado en un datawindow.Para esto se puede usar la siguiente expresión. long ll_Selectedll_Selected = long(dw_1.describe(evaluate('sum( if(IsSelected(), 1, 0) for all)',1)))

11. Pasar el contenido de un datawindow a otra ventanaLuego de tener un datawindow con información es posible pasar esos mismos datos a

otra ventana para no tener que volver a hacer el retrieve y ahorrar un acceso a la base dedatos. Se llama a la segunda ventana y se pasa por referencia el datawindow asi:OpenWithParm( w_window, dw_1 )En el evento open de w_window digita:datastore lds_parmlds_parm = Message.PowerObjectParmdw_1.DataObject = lds_parm.DataObjectlds_parm.ShareData(dw_1)Y en el evento close coloca:dw_1.ShareDataOff()

12.Crear un Datawindow Dinámicamente

Este es un ejemplo de como crear un datawindow desde una instrucción select que setiene. Es muy últil y muy práctico el ejemplo string ls_selectstring ls_wherestring ls_dwsyntaxstring ls_err ls_select = Select id, fname, lname, address, city, state, zip from customer ls_where = where customer.fname like ' + is_cust + %'ls_dwsyntax = SQLCA.SyntaxFromSQL ( ls_select, Style(Type=grid), ls_err )dw_1.Create ( ls_dwsyntax, ls_err )IF ls_err <> '' THENMessageBox ( error - Syntax, ls_err )ELSE

dw_1.SetTransObject ( SQLCA )dw_1.Retrieve()END IF

13.Crear o modificar una TablaComo crear una tabla o modificar una tabla desde el power script. Usa la sentenciaEXECUTE IMMEDIATE. Coloca el AutoCommit a TRUE porque el DDL SQL tiene queejecutarse fuera de la transacción.SQLCA.AutoCommit = Truels_sql = create table #tmp (abc varchar(255))EXECUTE IMMEDIATE :ls_sql USING SQLCA;Para modificar una tabla se usa la misma idea:

ls_sql = 'ALTER TABLE dba.tbl_name ADD col_name'EXECUTE IMMEDIATE :ls_sql USING SQLCA;

14. Datawindows con colores alternosEn los datawindows en Grid y columnas es posible hacer aparecer las filas con 2 coloresalternos. Es decir se puede hacer que una fila aparezca azul y otra amarilla, una azul unaamarilla.. y asi para todas las filas. Para altenar el color de las filas de un datawindowhaga lo siguiente. Abra el objeto datawindow y seleccione todos las columnas. Luego abrala expresión (expression) del campo de background color coloque la siguiente sentencia

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 7/36

 

 6

if ( mod(getrow(),2) = 0, color1, color2 )Donde color1 y color 2 los puede cambiar por sus colores favoritos asi:if ( mod(getrow(),2) = 0, RGB(159,166,213), RGB(232,218,140) )

15. Pasar de un campo a otro con ENTERMuchos programadores, han encontrado la necesidad de pasar de un campo a otro del

datawindow con Enter. Para esto se debe hacer un pequeño truco pero efectivo que acontinuacion te lo enseñamos. En el datawindow se define un evento de usuario con unnombre cualquiera y que se inicie cuando opriman enter, para eso seleccione el event IDpbm_dwnprocessenter.Luego como el evento se dispara cuando oprimen el enter, lo que se hace es enviar untab en ese evento. El codigo que debe tener el evento de usuario que creamos es elsiguienteSend(Handle(this),256,9,Long(0,0))Con este codigo se pasa de un campo a otro del datawindow con el enter y con tab.

16. Split con powerbuilder Hola comunidad... espero que a alguien le sirva este tip. es un split osea guardar datos en

una array utilizando un delimitador.is_estado_credito = sle_nodo.Text + ,String ls_array[ ]String ls_Rightlong ll_p, ll_contador, ll_ils_Right = Right(is_estado_credito, 2)ll_p = Pos(is_estado_credito, )if ls_Right ,, and ll_p = 0 thenll_i = 1do while ll_contador = 0ll_p = Pos(is_estado_credito, ,)if ll_p > 0 then

ls_array[ll_i] = Mid(is_estado_credito, 1, ll_p - 1)is_estado_credito = Replace(is_estado_credito, 1, ll_p, )ll_i = ll_i + 1elsell_contador = 1end if loopelseif ll_p > 0 thenmessagebox(,Error: Hay algun espacio en los nodos digitados)elsemessagebox(,Error: Verifique los nodos digitados)end if 

dw_split.Retrieve(ls_array)

17. Bloquear la Estación de Trabajo  A continuación describimos como puede bloquear la estación (en windows 2000 o XP)para proteger el equipo de usuarios no autorizados. Esto se hace utilizando el llamado deun API de windows así: Defina en [Global External Functions] la función asi:FUNCTION boolean LockWorkStation() LIBRARY User32.dllLuego para bloquear la consola llame la función así:LockWorkStation()

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 8/36

 

 7

18. programando en visual studio.net como en powerbuilder despues de instalar el datawindow.net en visual studio.net tienes que instanciar el objetosqlca para que puedas trabajar de la misma forma como lo haces en porwerbuilder esdecir tengas el mismo codigo ''dw_1.settransobject(sqlca)'' el codigo es el siguiente y lohaces en el evento load de la ventana o lo puedes declarar como instancia globalfinalmente agregas el datawindow a la ventana desde el cuadro de componenetes

sybase, el datawindow puede estar construido en powerbuilder 10 o datawindow builder Private Sub Button2_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button2.ClickDim SQLCA As New Sybase.DataWindow.TransactionSQLCA.Dbms = Sybase.DataWindow.DbmsType.OdbcSQLCA.AutoCommit = FalseSQLCA.DbParameter = ConnectString='DSN=base_cyber;UID=dba;PWD=sql'SQLCA.Connect()dw_1.settransobject(sqlca)End Sub

19. Numero de linea en datawindow con varios group

Cuando tenemos un datawindow tabular (tipico reporte) nos vemos en la necesidad deponer un numero de linea... el mismo que debe reiniciarce al comenzar otro grupo ...siusamos un campo computado con getrow() nunca se reiniciara... Cuando tenemos undatawindow tabular (tipico reporte) nos vemos en la necesidad de poner un numero delinea... el mismo que debe reiniciarce al comenzar otro grupo ...si usamos un campocomputado con getrow() nunca se reiniciara...lo que debemos hacer es crear un campocomputado y usar la funcion *****ulativesum(1 for group n) el valor n correspone al grupoel cual querramos que se reinicie.... funciona se los aseguro.... da un mejor aspecto a losreportes...... suerte amigos..

20. Uso objeto MDIUso objeto MDIclient

Trate de crear una IDE casi similar a Power Builder 9.0 en una aplicación, en la cual elworkspace de la aplicacion se pudiese dividir o acomodar, para dar cabida a otrasventanas, como sucede con la ventana del workspace de Power Builder 8 / 10, encontreel objeto mdiclient.Este es el encargado de dimensionar realmente el workspace de la aplicacion, no poseeeventos, pero si unas funciones y propiedades para su naturaleza.Es referenciado asi:w_ventanamdi.mdi_1.propiedad

 Aqui muestro un ejemplo muy practico.En la ventana tipo mdi, inserto un objeto de usuario uo_1, que siempre debe estar mostrado, sobre las ventanas hijas de la aplicacion, en la parte inferior justo antes de labarra de estado.

Lo hago de la siguiente manera:// w_main - ventana tipo mdi// uo_1 objeto de usuario, que tambien puede//ser una ventana u otro tipo de objeto visual.En el evento resize de w_main escrito el siguiente codigo:int nWidth, nHeightnWidth = this.WorkSpaceWidth( )nHeight = this.WorkSpaceHeight( )mdi_1.move(0,110) // muevo el mdi_client

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 9/36

 

 8

//debajo de la barra de herramientasmdi_1.Resize (nWidth, nHeight - 200 )//resto 200 para dar espacio a mi uo_1// en la parte inferior de la ventanauo_1.move(0, mdi_1.height + 110 )// muevo uo_1 hacia la parte inferior del workspace

Espero les sirva en sus proyectos.

21. Modificar el Where de una datawindowEste trozo de codigo sirve para concaternar un trozo de WHERE a un SELECT yarealizadoen este caso con sintaxis de ORACLE.Es util para realizar ventanas de filtro que solicitan una serie de condiciones que serecogen en un evento aceptar para montar un trozo de where del tipo:'importe > 100 and importe k) or (j = 0)li_pos = Pos (ls_select, 'WHERE ',k)IF (li_pos > 0) THENls_select = MID (as_select, 1, li_pos - 1)

ls_where = 'WHERE (' + as_where + ') AND ' + MID (as_select, li_pos + 6)goto finEND IF

li_pos = Pos (ls_select, 'GROUP BY')IF (li_pos > 0) THENls_select = MID (as_select, 1, li_pos - 1)ls_where = 'WHERE (' + as_where + ') ' + MID (as_select, li_pos)goto finEND IFli_pos = Pos (ls_select, 'ORDER BY')IF (li_pos > 0) THEN

ls_select = MID (as_select, 1, li_pos - 1)ls_where = 'WHERE (' + as_where + ') ' + MID (as_select, li_pos)goto finEND IFls_select = as_selectls_where = ' WHERE (' + as_where + ') 'fin:return ls_select + ls_where

22. De Números a Letras FINAL y bien hecho>>>Estoy cansado de bajar todos los programas que pusieron alli para convertir de numeros aletras, me dio tanta colera que ninguno funcionara bien que lo hice casi todo nuevo, OK,

no me preocupa la lógica, ni lo dinámico que lo hayan tratado de hacer antes, yo lo hiceque funcione perfectamente bien, SIN ERRORES..no estoy diciendo que sea la super logica pero funciona mejor que cualquiera de los queestaban alli pues considera muchas circunstancias no contempladas antes...////simplemente creen una ventana, agregar un sle_1 y un boton, alargar el sle_1 para quele quepa bastante ggg, luego ponen el siguiente script en el boton.lo corren y pongan el siguiente numero exactamente como yo lop pongo aqui...

>>> 9842416527852.32 sin comas OK

5/14/2018 Ejemplos Power Builder 10.5 - slidepdf.com

http://slidepdf.com/reader/full/ejemplos-power-builder-105 10/36

 

 9

luego precionan el boton y verán//**************************scriptString ls_unidades[], ls_decenas[], ls_centenas[]string ls_valor1[] = {' mil ', ' millones ', ' billones '}string ls_valor2[] = {' mil ', ' millón ', ' billón '}String ls_decimal

Integer li_len, istring oracion_hasta_aquils_unidades[1] = 'un'ls_unidades[2] = 'dos'ls_unidades[3] = 'tres'ls_unidades[4] = 'cuatro'ls_unidades[5] = 'cinco'ls_unidades[6] = 'seis'ls_unidades[7] = 'siete'ls_unidades[8] = 'ocho'ls_unidades[9] = 'nueve'ls_unidades[10] = 'diez'

ls_unidades[11] = 'once'ls_unidades[12] = 'doce'ls_unidades[13] = 'trece'ls_unidades[14] = 'catorce'ls_unidades[15] = 'quince'ls_unidades[16] = 'dieciseis'ls_unidades[17] = 'diecisiete'ls_unidades[18] = 'dieciocho'ls_unidades[19] = 'diecinueve'ls_unidades[20] = 'veinte'ls_unidades[21] = 'veintiun'ls_unidades[22] = 'veintidos'

ls_unidades[23] = 'veintitres'ls_unidades[24] = 'veinticuatro'ls_unidades[25] = 'veinticinco'ls_unidades[26] = 'veintiseis'ls_unidades[27] = 'veintisiete'ls_unidades[28] = 'veintiocho'ls_unidades[29] = 'veintinueve'ls_decenas[3] = 'treinta'ls_decenas[4] = 'cuarenta'ls_decenas[5] = 'cincuenta'ls_decenas[6] = 'sesenta'ls_decenas[7] = 'setenta'

ls_decenas[8] = 'ochenta'ls_decenas[9] = 'noventa'ls_centenas[1] = 'ciento'ls_centenas[2] = 'doscientos'ls_centenas[3] = 'trescientos'ls_centenas[4] = 'cuatrocientos'ls_centenas[5] = 'quinientos'ls_centenas[6] = 'seiscientos'ls_centenas[7] = 'setecientos'