Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



domingo, 11 de septiembre de 2011

Manejar arrays de objetos en Gambas2

Este es un tema que surgió en el foro de gambas-es.org, y me parece muy interesante y útil.  La explicación se la debemos a Soplo.

Enlace original: http://www.gambas-es.org/viewtopic.php?f=1&t=1467&highlight

Problema:
Se trata de gestionar datos de canciones. Necesitamos una forma de "agregar o eliminar" los datos de las canciones.¿como hacerlo?


1) Crearmos una clase "Musica" que contenga

' Gambas class file
PUBLIC Index AS String
PUBLIC Song AS String
PUBLIC Artist AS String
PUBLIC Size AS Integer
PUBLIC long AS Long
PUBLIC Status AS Integer

PUBLIC SUB ver()
'este método nos muestra por los terminal los datos
    PRINT index
    PRINT Song
    PRINT Artist
    PRINT Size
    PRINT Long
    PRINT Status
END


2) Ahora nos vamos al formulario donde vayamos a usar los datos.

' Gambas class file
PUBLIC Datos AS NEW object[] 'este es el array que contendrá tus datos
PUBLIC claves AS NEW String[] 'este array contiene los indices

PUBLIC Variable AS Musica 'declarar una variable de tipo la clase anterior
PUBLIC indice_borrar AS String 'indice que le indicare que voy a borrar

PUBLIC SUB Form_Open()
DIM a AS Integer 'contador para for Next
'introduzco un dato:
Variable = NEW Musica 'crear la instancia
Variable.Index = "1aze"
Variable.Song = "Yo tengo un castor ... "
Variable.Artist = "el mejor del mundo ... "
Variable.Size = 1000
Variable.long = 2000
Variable.status = 5
'lo añado al array de datos y las clave
Datos.add(Variable)
claves.Add(variable.Index)

'introduzco otro dato:
Variable = NEW Musica 'crear otra vez la instancia (es importante ponerla)
Variable.Index = "2bde" 'añado un nuevo indice
Variable.Song = "Mi mar en casa ... "
Variable.Artist = "el segundo del mundo ... "
Variable.Size = 1400
Variable.long = 2200
Variable.status = 3
'lo añado al array de datos y las clave
Datos.add(Variable)
claves.Add(variable.Index)


'muestro el array de datos
PRINT "---------- Muestro 1º variable ----------"
Variable = Datos[0]
Variable.ver
PRINT "---------- Muestro 2º variable ----------"
variable = Datos[1]
variable.ver

'borro un registro, cuyo indice sea el indice "1aze"
indice_borrar = claves.Find("1aze")

IF indice_borrar = -1 THEN
Message.Error("No encuentro el indice para borrarlo")
ELSE
Datos.Remove(indice_borrar)
claves.Remove(indice_borrar)
ENDIF

'muestra de datos
PRINT "-------------Muestros todos los datos -------------"
FOR a = 0 TO Datos.Count - 1
PRINT "---------dato:"; a; "----------------"
variable = Datos[a]
variable.ver
NEXT

END

Este es la salida que genera el programa en la consola:
---------- Muestro 1º variable ----------
1aze
Yo tengo un castor ...
el mejor del mundo ...
1000
2000
5
---------- Muestro 2º variable ----------
2bde
Mi mar en casa ...
el segundo del mundo ...
1400
2200
3
-------------Muestros todos los datos -------------
---------dato:0----------------
2bde
Mi mar en casa ...
el segundo del mundo ...
1400
2200
3

Como habeis visto para  borrar el dato   "1aze" , hemos tenido que:
1) buscarlo en el array de claves (con el método .find), que devuelve el valor el lugar (o posicion) donde esta
                indice_borrar = claves.Find("1aze")
2) Usar el método .Remove(indice_borrar)
                Datos.Remove(indice_borrar)
                claves.Remove(indice_borrar)
Debemos borrar tanto el array de Datos como el array de Claves, ambos estan ligados.

Saludos