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