Mostrando entradas con la etiqueta Gambas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Gambas. Mostrar todas las entradas

06 marzo 2008

Gambas - Leer un XML


Bue, lo prometido es deuda, aqui le dejo una pequeñisima reseña con un pequeñisimo y sencillo ejemplo de como pueden leer el archivo xml que se generó en la nota anterior, sobre escritura de XML con Gambas.
Un par de tips que olvidé comentar sobre este tema son los siguientes:
- Gambas utiliza una "libreria" de nombre libxml, adaptada a Gambas por el Sr. Daniel Campos Fernandez (puedo equivocarme si es asi dejen un comentario y corrigo esta entrada) para poder procesar los archivos XML.
- La implementación por medio de esta libreria (y de Gambas) puede parecer un poco larga, pero es muy sencilla de entender. Además recuerden que Gambas es un leguaje Orientado a Objetos, por lo que se puede implementar en "clases" y por medio de "métodos" y haciendo uso de "polimorfismo" se pueden crear aplicaciones bastante robustas para luego solo mandar "mensajes" a las mismas para que hagan todo el trabajo ellas solas. Esto implica que en un principio tengan que escribir (copiar, pegar y modificar) un poco mas de código que en otros lenguajes, pero son solo las bases, luego podran re-utilizar todo para distintos propositos haciendo uso de características de Orientado a Objetos.
- Tanto este, como el anterior ejemplo estan escritos para Gambas2, no le he probado en versiones anteriores.
- Este ejemplo hace uso del archivo "envio.xml" generado en el ejemplo anterior y que se encuentra en el directorio (carpeta) HOME de su usuario ("/home/SUNOMBREDEUSUARIO/envio.xml").

Para el ejemplo que les propongo tienen que crear un nuevo proyecto, tildar el enlaze para hacer uso del complemento XML.
Una vez creado el proyecto, agregan:
- Un TreeView (Vista de Arbol) que se encuentra en "Form" (cuarta fila, tercer item), y le cambian el nombre a "arbol".
- Un Button (Botón), que le cambian el nombre a "btnAplicacionCerrar".

Hacen doble click sobre el FORMULARIO para ir a la parte de código del mismo, luego borran todo lo que haya en la pantalla de codificación. Copian y pegan el código que les dejo a continuación.

El código se encuentra comentado (todo lo que esta en una LINEA despues del ' es un comentario) y hago uso de estructuras básicas de cualquier lenguaje. Por lo cual no creo necesario explicar en detalle el proceso que realiza.
Ejemplo de Lectura de un Archivo XML:



' Gambas class file

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

DIM rdorecorrido AS Boolean = FALSE
DIM recorrido AS Boolean = TRUE
' Apertura de archivo
DIM xml AS XmlReader ' Declaración
xml = NEW XmlReader ' Instanciación
TRY xml.Open(User.Home & "/envio.xml") ' Apertura del archivo.
IF ERROR THEN
Message.Error("No se pudo abrir el archivo xml") ' Si hay algun error mostramos un mensaje amigable al usuario
RETURN
ENDIF
' Recorrido de archivo
TRY xml.Read() ' Se lee en el archivo, cada lectura es un avance en el nodo del archivo

DO WHILE recorrido = TRUE ' Mientras la var recorrido sea V hacer:
IF xml.Node.Type = XmlReaderNodeType.Element THEN ' Si el tipo de Nodo es igual a un Element(=1) entonces:
IF xml.Node.Name = "envios" THEN ' Si el nombre del Nodo es "envio" entonces:
RellenaArbol(xml)
rdorecorrido = TRUE
ENDIF
ENDIF
' Lectura del siguiente nodo
TRY xml.Read()
IF ERROR THEN
Message.Error("Se ha producido un error en el recorrido del archivo")
RETURN
ENDIF
' Si se llega al final del archivo se debe detener el DO WHILE
IF xml.Eof THEN
recorrido = FALSE
ENDIF
LOOP

IF rdorecorrido = FALSE THEN
Message.Error("El xml no contiene datos de transaccion")
ENDIF
' Cierre de archivo
TRY xml.Close()
END

PUBLIC SUB RellenaArbol(xml AS XmlReader) ' Aqui se va a rellenar el "arbol"

DO WHILE TRUE
TRY xml.Read() ' Se lee el siguiente nodo
IF ERROR THEN RETURN

IF xml.Node.Type = XmlReaderNodeType.Element THEN
IF xml.Node.Name = "libro" THEN ' Si el nombre del nodo es "libro" entonces llamamos a "RellenaItem"
RellenaItem(xml)
ENDIF
ELSE
IF xml.Node.Name = "envios" THEN ' Si el nombre del nodo es "envios" entonces hemos terminado la etiqueta de envios
IF xml.Node.Type = XmlReaderNodeType.EndElement THEN BREAK ' Si es un "elemento final" => salimos
ENDIF
ENDIF
LOOP

END

PUBLIC SUB RellenaItem(xml AS XmlReader)

DIM Limite AS Integer
DIM sNodo AS String

TRY xml.Read()
IF ERROR THEN RETURN
DO WHILE TRUE
IF xml.Node.Type = XmlReaderNodeType.Element THEN
SELECT CASE xml.Node.Name ' Estructura "Segun" o "Case", reemplaza a un "if" anidado con ciertas particularidades
CASE "id_libro"
TRY xml.Read()
TRY Arbol.Add(sNodo & "-id_libro", "Identificación del Libro: " & xml.Node.Value, NULL, sNodo) ' Se agrega un item con el valor de id_libro
CASE "nombre_libro"
TRY xml.Read()
TRY Arbol.Add(sNodo & "-nombre_libro", "Nombre del Libro: " & xml.Node.Value, NULL, sNodo)
CASE "editorial"
TRY xml.Read()
TRY Arbol.Add(sNodo & "-editorial", "Editorial: " & xml.Node.Value, NULL, sNodo)
CASE "genero"
TRY xml.Read()
TRY Arbol.Add(sNodo & "-genero", "Género: " & xml.Node.Value, NULL, sNodo)
END SELECT
ELSE
IF xml.Node.Name = "libro" THEN BREAK ' Si llegamos al final de la etiqueta libro, entonces se rompe secuencia
ENDIF
TRY xml.Read()
IF ERROR THEN BREAK
LOOP
END

PUBLIC SUB btnAplicacionCerrar_Click()

ME.Close ' Si hacen click sobre el boton "Cerrar" entonces este comando nos cierra la pequeña aplicación.

END


Espero les sea útil y les haya ayudado en algo.
Hasta pronto, que estén bien.

Johny.

01 marzo 2008

Gambas - Escribir un XML


Los archivos XML forman hoy en dia un estandar aceptado globalmente para la transferencia de información.
Es de libre uso, cumple especificaciones, y es independiente tanto del lenguaje como de la plataforma.Esto quiere decir, que mediante este formato pueden comunicarse sistema hechos en distintos lenguajes y que corran sobre distintas plataformas.
Ya que tanto Gambas como Java me parecen lenguajes muy interesantes, poderosos y de facil aprendizaje; voy a aportar mis escasos conocimientos para que queden plasmados en este blog.

Bien, en esta oportunidad vamos a ver algo de Gambas respecto al XML.
Gambas posee distintos Componentes, entre ellos tenemos el de Programción XML. El mismo se compone de:

  • gb.xml
  • gb.xml.xslt
  • gb.xml.rpc

El primero cuenta con las siguientes clases:

  • xmldocument
  • xmlnode
  • xmlreader
  • xmlreadernodetype
  • xmlwriter

Ejemplo:

Se tiene una pequeña librería, y recientemente cuanta con internet y abrió un sucursal en un pueblo cercano. Se decea enviar por internet los datos de los nuevos libros que hayan ingresado para que la sucursal este al tanto de las novedades.
Supongamos que se tiene el siguiente esquema


Y se desea enviar a la sucursal solamente los datos correspondientes a dos libros nuevos que entraron en el dia.
En este caso el sistema que posea la librería deberia poder generar un pequeño archivo xml, y se pueda transmitir por internet para que la sucursal absorba esa información.
Definicion de Archivo
Nuestro archivo tendria la siguiente definición (sin los *, les puse porque sino no se mostraba bien):

<*?xml version=”1.0”?>
<*envios>
<*transaccion_id>115451
<*transaccion_tipo>1
<*libro>
<*id_libro>1235487
<*nombre_libro>odisea
<*editorial>anaya
<*genero>clasica
<*/libro>
<*/envios>

Hecho esto, procedemos a escribir el codigo fuente para escribir esa informacion en un archivo.
Creamos un proyecto por consola, que haga referencia a gb.xml
Dentro del main escribimos el siguiente codigo:

DIM xml AS XmlWriter
xml = NEW XmlWriter

xml.Open("", TRUE)
xml.StartElement("envios")
xml.Element("transaccion_id", "115451")
xml.Element("transaccion_tipo", "1")
xml.Element(“transaccion_fecha” , “20080228”)
xml.StartElement("libro")
xml.Element("id_libro", "1235487")
xml.Element("nombre_libro", "odisea")
xml.Element("editorial", "anaya")
xml.Element("genero", "clasica")
xml.EndElement()
xml.EndElement()
PRINT xml.EndDocument()

Primero, se declara y se instancia un XmlWriter en “xml”, luego abrimos un archivo xml, y comienza su escritura.
StartElement, seria la etiqueta de inicio
Element, seria el elemento en si, pero cuando se trata de una estructura simple como por ejemplo “1235487”, entonces se puede resumir el StartElement, Element y EndElement en una sola linea colocando primero la etiqueta, y luego el contenido de la etiqueta, entonces quedaria “xml.Element("id_libro", "1235487")”
En el final, el PRINT xml.EndDocument, nos mostrará por consola la salida del documento xml.

Esta es con propósito de ver como quedaria, sin embargo debemos cambiar un par de cositas para que el código cree un archivo xml con la estructura creada.

xml.Open(User.Home & "/envio.xml", TRUE)
...
xml.EndDocument()

En el Open, agregamos referencia a un archivo físico para que lo cree, y en el EndDocument le quitamos en PRINT.
De esta forma el EndDocument generará el archivo xml.
Eso es todo, si van a su directorio Home, verán el archivo creado.
Queda para la siguiente entrega la absorción de un documento xml.

Hasta pronto, que estén bien.


Johnyx.

15 diciembre 2007

Programación Básica

Invitando, siempre de buena manera, a las personas a que experimenten las herramientas de programación les dejo un enlace a una página del tipo interesante.

En ella van a ver ejemplos de códigos sencillos, empezando con los diagramas de flujo y con ejemplos prácticos.
Y aunque paresca una tontera, ejemplos como los algoritmos de busqueda son muy utilizados, incluso en sistemas grandes con manejo de datos muy complejos. La correcta implementación y en el momento adecuado de alguno de estos algoritmos puede ahorrar muchos dolores de cabeza (lo digo por experiencia).
La página está en español, y toma como referencia el IDE/Lenguaje Gambas, que anteriormente se estuvo comentando en este blog. He aqui el enlace:

Gambas Dev

Espero les resulte interesante. Hasta pronto, que estén bien.

Johny.

15 noviembre 2007

Entornos de Desarrollo

Cuando uno estudia o le gusta experimentar sobre un marco TI suele ser tan amplio el repertorio de lenguajes, frameworks y entornos de desarrollo que es dificil elegir uno, y comienza la inmediata sensación de frustración.
Dado que la temática de este blog gira alrededor de sistemas operativos basados en gnu-linux procedo a comentar dos IDEs o para los que no conoscan mucho ingles su traducción es Entornos de Desarrollo.

Los IDEs son los programas sobre el cual uno escribe el código del programa. Algunos IDEs soportan coloreo de código, intellisense, depurador, emisión de reportes... entre otras características que ayudan al desarrollo de un programa o sistema.

Dos muy buenos IDEs que funcionan sobre lenguajes de facil apredizaje son: Gambas2 y Netbeans 5.5.1.

Gambas2 es un IDE que al mismo tiempo es el propio lenguaje, se basa en un leguaje tipo basic orientado a objetos y de propósito general, con la sintaxis y facilidad de uso del mismo, si se lo puede comparar tendría que ser con una versión evolucionada de visual basic 6. Por lo que probé si ya sabes algo de vbasic no vas a tener ningun problema en realizar cosas básicas en Gambas, como creación y manupilación de ventanas y creación de códigos de algoritmos sencillos pero potentes. Y por lo que ví, a un amigo hacer, permite de manera sencilla la creación de sistemas cliente-servidor utilizando una base de datos externa mediante sql. De la misma manera que lo anterior es factible desarrollar aplicaciones stand-alone utilizando bases de datos como SQLite.

Netbeans en su última versión estable la 5.5.1, se ha convertido en un IDE muy potente, con plugins que permiten desarrollar en diversos lenguajes. El lenguaje predilecto de Netbeans es Java, y permite el desarrollo de aplicaciones J2EE, J2SE, y J2ME, estas corresponden a aplicaciones enterprise, de escritorio, y aplicaciones para móviles respectivamente. Por plugins instalables tambien permite desarrollo de aplicaciones web, C y C++ y Ruby. Java es un lenguaje tipado, orientado a objetos, si son estudiantes de carreras TI es sumamente importante aprender este lenguaje o algun otro parecido, pero Java es un lenguaje por excelencia para aprender el paradigma orientado a objetos. Se debe estudiar y leer un poco al principio pero luego se vuelve bastante dinámico. Si hasta yo pude aprender lo básico entonces cualquiera puede ;-)

Finalmente para instalarlos. Tomando como referencia la plataforma que estoy utilizando actualmente, o sea Mandriva, se debe hacer lo siguiente:
Sobre Mandriva 2008 One:
Gambas
1 ) Ir al "Centro de Control Mandriva" --> Administración de Software --> Administrar el software: buscar gambas2, seleccionar todos los paquetes y hacer click en aplicar. Eso es todo, no necesitan nada mas. El acceso directo les aparecerá en Menu--> Desarrollo.
Netbeans
1) Ir a la página de netbeans descargar netbeans5.5.1, se encuentra en español. Una ves descargado hacer click derecho en el archivo, propiedades y tildar la opción: "es ejecutable"
2) Instalar de la misma forma que arriba se describió el programa "bc".
3) Instalar desde terminal: como su usuario o como root ir a la carpeta o directorio donde guardaron el instalador de netbeans y escribir lo siguiente:
./netbeans-5_5_1-linux-es.bin
Recuerden que pueden escribir "./netb" y apretar la tecla "Tab" para que automáticamente se complete la instrucción.
4) Luego aparece el asistente de instalación, a lo cual le dan "siguiente, siguiente... siguiente".
También el acceso directo aparece en Menu --> Desarrollo.

Les recomiendo mucho la version 2008 de Mandriva, pues han realizado un buen trabajo optimizando la instalación de software.
Obviamente les recomiendo que prueben ambos IDEs/lenguajes y si no tienen mucha idea de programación , ya sea porque no les gusta mucho o recien estan en primer año de una carrera TI, Gambas2 es un entorno de facil aprendizaje y rápida producción por las caracteristicas que incluye, ademas les permitirá aprender las bases del paradigma de orientado a objetos.

Espero les haya servido, y hasta la proxima entrega!

Johnyx.

Enlaces relacionados:
Gambas
Netbeans
SQLite Latino
Mandriva