Gambas/Scripting con Gambas
Gambas recientemente obtuvo soporte para convertirse en un lenguaje para scripting. Los scripts es una forma de programa que es interpretado en vez de compilado. Los scripts son de hecho archivos de texto plano que son interpretados una linea a la vez. El scripting te permite desarrollo rapido y comunicar facilmente con programas, incluso si estos no han sido escritos en Gambas.
Porque usar scripts El uso de scripts te permite combinar secuencias largas y repetitivas de comandos en un único y simple comando. También puedes generalizar secuencias de operaciones sobre un grupo de datos, en un procedimiento que pueda ser aplicado posteriormente a un grupo de datos similar. Incluso, puedes crear nuevos comandos usando una combinación de comandos, utilerías y programas en maneras que ni sus autores originales se hubieran imaginado. Scripting es muy comun en Linux, si tu eres nuevo en Linux, piensa en los scripts como primos de los archivos de procesamiento por lotes (batch) de MSDOS o Windows.
Desde la version 2.9, Gambas también te ofrece otro tipo de scripts, los tipo CGI. Que te permiten crear paginas web con funcionalidad tipo ASP.

Gsb2 - En la consola de Linux
[editar]- Hola Mundo con Scripting en Gambas
Esta característica es provista por la utilería gbs2, que es un pequeño ejecutable de Gambas que permite vaciar cualquier código de Gambas en un archivo de texto. Antes que nada debes asegurarte que el scripter gbs2 esta instalado en alguna parte de tu sistema. Teclea en la linea de comandos o consola de tu distribución de Linux:
user@PC:~$ which gbs2 /usr/bin/gbs2 user@PC:~$
Despues abre el Editor de Codigo de Gamabs y tu editor de texto favorito. Crea un archivo llamado holamundo.gbs en el directior home. Inserta las siguientes lineas a tu archivo:

#!/usr/bin/env gbs2 DIM text AS String = "Hola Mundo con Scripting en Gambas" PRINT text
Cada script de Gambas inicia con la linea
#!/usr/bin/env gbs2
Ahora ejecuta el script en la consola de Linux tecleando el nombre del script.
user@PC:~$ holamundo.gbs Hola Mundo con Scripting en Gambas user@PC:~$

- Ejecutar comandos y aplicaciones
Una de las tareas mas comunes de los scripts es ejecutar otras aplicaciones y comandos del sistema. El siguiente script muestra el contenido del directorio actual pero ignorando los owners y los archivos de respaldo. Llama a este archivo ls.gbs.
#!/usr/bin/env gbs2
DIM command AS NEW String[]
command.Add("ls")
command.Add("-B")
command.Add("-g")
PRINT "------ USING EXEC ------"
EXEC command
PRINT "------ USING SHELL ------"
SHELL "ls -B -g"
De hecho, si teclearas directamente en la consola el comando ls -g -B obtendrías el mismo resultado que ejecutando tu script. Ejecuta tu script para que lo constates.
Como de seguro ya notaste, puedes declarar todo tipo de variables, incluso arrays; pero no esta limitado a esto, también puedes hacer uso de procedimientos, funciones y casi todos los recursos disponibles en el lenguaje Gambas.
- Leer entradas por el usuario
Cuando un script esta siendo ejecutado, frecuentemente es necesario que reciba cierta retroalimentación del usuario para iniciar alguna tarea o para tomar alguna decision o cualquier otra cosa que deba hacer. Escribe el siguiente código en un archivo llamado preguntanombre.gbs.
#!/usr/bin/env gbs2 DIM userInput AS String PRINT "Por favor, introduce tu nombre:" INPUT userInput PRINT "Hey " & userInput &"! Recibí tu respuesta. Yupi!"
Ejecuta el script y veras que pregunta por tu nombre y después que presiones [Enter] aparece un mensaje usando la cadena de caracteres que tecleaste.
user@PC:~$ preguntanombre.gbs Por favor, introduce tu nombre: Sergio Hey Sergio! Recibí tu respuesta. Yupi! user@PC:~$
- Pasar argumentos al script
Algunas otras veces, desearas recibir la información del usuario desde un inicio como argumentos del script. Esto lo consigues haciendo uso del array Args[] de la clase Application. Escribe el siguiente código en un archivo llamado argumentos.gbs.
#!/usr/bin/env gbs2
PUBLIC SUB Main()
DIM i AS Integer
DIM arg AS String
'Using a FOR-NEXT loop
FOR i = 0 TO Application.Args.Count
PRINT Application.Args[i]
NEXT
'Using a FOR-EACH loop
FOR EACH arg IN Application.Args
Print arg
NEXT
'Using a FOR-NEXT loop
PRINT “\nThis loop starts from 1 not from 0”
FOR i = 0 TO Application.Args.Count
PRINT Application.Args[i]
NEXT
END
Hasta el momento, los scripts que habias escrito empezabas sin ninguna declaración del método Main(), pero ahora, para poder acceder a la clase Application necesitas declarar un metodo de inicio. De hecho, es una buena practica siempre hacer uso del metodo Main() incluso en scripts pequenos. Ejecuta el script.
user@PC:~$ arguments.gbs Estos son argumentos “Este es un solo argumento”
/tmp/gambas.1.../script-cache/5......
Estos son argumentos Este es un solo argumento /tmp/gambas.1...script-cache/5...... Estos son argumentos Este es un solo argumento This loop starts from 1 not from 0 Estos son argumentos Este es un solo argumento user@PC:~$
La primer linea de los argumentos, es decir el elemento 0 del array, no es un argumento pasado por el usuario, sino una referencia al cache del script. Toma en cuenta esto cuando estés escribiendo tus propios scripts.
- Usando componentes de Gambas
Para darle mas poder a tus scripts, puedes hacer uso de los componentes incluidos en Gambas. En este caso usaremos el componente gb.xml. En un script llamado escribexml.gbs agrega los siguiente:
#!/usr/bin/env gbs2
USE "gb.xml"
PUBLIC SUB Main()
DIM writer AS XmlWriter
writer = NEW XmlWriter
writer.Open(User.Home & "/Heroes.xml", TRUE)
writer.Comment("Heroes Characters")
writer.StartElement("characters")
writer.Attribute("series", "Heroes")
writer.StartElement("heroe")
writer.Attribute("id", "1")
writer.Attribute("name", "Claire Bennet")
writer.StartElement("name")
writer.Text("Claire Bennet")
writer.EndElement 'name
writer.StartElement("played_by")
writer.Text("Hayden Panettiere")
writer.EndElement 'played_by
writer.StartElement("ability")
writer.Text("Rapid cellular regeneration")
writer.EndElement 'ability
writer.EndElement 'heroe
writer.StartElement("heroe", ["id", "2", "name", "Hiro Nakamura"])
writer.Element("name", "Hiro Nakamura")
writer.Element("played_by", "Masi Oka")
writer.Element("ability", "Space-time manipulation: teleportation & time travel")
writer.EndElement 'heroe
writer.StartElement("villain", ["id", "3", "name", "Gabriel Sylar"])
writer.Element("name", "Gabriel Sylar")
writer.Element("played_by", "Zachary Quinto")
writer.Element("ability", "Understand how things work and multiple other abilities acquired")
writer.EndElement 'villain
writer.EndElement 'character
PRINT writer.EndDocument()
END
Ejecutalo y debiera crearte un archivo XML llamado Heroes.xml con el siguiente contenido:
<?xml version="1.0"?> <characters series="Heroes"> <heroe id="1" name="Claire Bennet"> <name>Claire Bennet</name> <played_by>Hayden Panettiere</played_by> <ability>Rapid cellular regeneration</ability> </heroe> <heroe id="2" name="Hiro Nakamura"> <name>Hiro Nakamura</name> <played_by>Masi Oka</played_by> <ability>Space-time manipulation: teleportation & time travel</ability> </heroe> <villain id="3" name="Gabriel Sylar"> <name>Gabriel Sylar</name> <played_by>Zachary Quinto</played_by> <ability>Understand how things work and multiple other abilities acquired</ability> </villain> </characters>
Gsw - En CGI Web
[editar]La funcionalidad es provista por gbw2, que en realidad es un link simbolico a gbs2. Cuando gbs2 detecta que es ejecutado desde gbw2, sabe que tienen que procesar una pagina de servidor y no un script. Después, gbs2 transforma la pagina de servidor aun script normal y luego lo ejecuta.
#!/usr/bin/env gbw2
<%
DIM sEnv AS String
%>
<html>
< h2 >CGI script environmental variables< /h2 >
< table border="1" cellspacing="0" cellpadding="2" >
< tr >
< th align="left">Name< /th >
< th align="left">Value< /th >
< /tr >
<% FOR EACH sEnv IN Application.Env %>
< tr valign="top" >
< td ><%= sEnv %>< /td >
< td ><%= Application.Env[sEnv] %> < /td >
< /tr >
<% NEXT %>
< /table >
</html>
Ejemplo tomado de http://gambasdoc.org/help/doc/serverpage