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

miércoles, 15 de octubre de 2014

Usando Estructuras de Datos: ejemplo de insertar/modificar/borrar y guardar datos en un archivo plano.

 

 Usando Estructuras de Datos: 

ejemplo de insertar/modificar/borrar y

 guardar datos en un archivo plano.


Este es un ejemplo de como se puede gestionar datos usando estructuras de datos, podeis encontrar más información en curso de gambas: estructuras de datos

Las estruturas de datos se definen de la siguiente manera en gambas:


PUBLIC STRUCT
Identifier
  Field 1 [ Embedded array declaration ] AS [ Datatype ]
  Field 2 [ Embedded array declaration ] AS [ Datatype ]
  . . .
 Field n [ Embedded array declaration ] AS [ Datatype ]
END STRUCT


En el ejemplo vamos a usar este estructura:
Public Struct datos
    asunto As String
    color As Integer
    fecha As Date
    descripcion As String
End

Que nos permitirá almacenar los datos de un "recordatorio", osea un asunto , un color (para determinar el nivel de importancia del asunto, una fecha y la descripción del asunto.

El usuario manejará todas las opciónes desde el siguiente formulario:
Haciendo las acciones habituales con los datos: añadir, modificar, borrar, desplazarnos por los registros.
Ademas he añadido la opción de "leer datos" y "guardar datos", para que sea posible tener los datos en el disco duro salvados.

Internamente, la estructura del programa es asi:

Tenemos la clase GestionarDatos, que tiene los métodos para trabajar con los datos

Y luego tenemos el formulario, donde se ha minimizado el código, usando un objeto de la clase "GestionarDatos", para que haga las acciones que elija el usuario.





Código Fuente:
Clase GestionarDatos
-
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. ' Gambas class file
  2.  
  3. Public RutaDatos As String = User.home & "/Comentarios.dat"
  4.  
  5. Public Struct datos
  6.     asunto As String
  7.     color As Integer
  8.     fecha As Date
  9.     descripcion As String
  10. End Struct
  11.  
  12. Private lista As Datos[]
  13. Private $indice As Integer
  14.  
  15. Public Sub _new()
  16.    
  17.     lista = New Datos[] ' inicio array de datos de listas  
  18.    
  19. End
  20.  
  21. Public Sub add(d As Datos)
  22.    
  23.     lista.Add(d)
  24.     Message.Info(("Registro Añadido")) ' lo pongo con doble parentesis para que pueda se traducido a otros idiomas.
  25.    
  26. End
  27.  
  28. Public Function rescata(indice As Integer) As Datos
  29.    
  30.     Dim registro As New Datos
  31.    
  32.     Try registro = lista[indice]
  33.    
  34.     If Error Then
  35.         Message.Error("Ha habido un problema al intentar leer el registro indicado")
  36.         Return Null
  37.     Else
  38.         $indice = indice
  39.         Return registro
  40.     Endif
  41.    
  42. End
  43.  
  44. Public Function erase(indice As Integer) As Boolean
  45.    
  46.     Try lista.Delete(indice)
  47.     If Error Then
  48.         Message.Error("Ha habido un problema al intentar Borrar el registro indicado")
  49.         Return False
  50.     Else
  51.         Return True
  52.     Endif
  53.    
  54. End
  55.  
  56. Public Sub setIndice(a As Integer)
  57.     'comprobación de que a es admisible
  58.    
  59.     If a < 0 Then
  60.         Message.Error(("No es posible ir a ese indice, ya hemos llegado al primero"))
  61.         Return
  62.     Endif
  63.    
  64.     If a > lista.max Then
  65.         Message.Error(("No es posible ir a ese indice ya hemos llegado al ultimo"))
  66.         Return
  67.     Endif
  68.     $indice = a  
  69.    
  70. End
  71.  
  72. Public Sub getIndice() As Integer
  73.    
  74.     Return $indice
  75.    
  76. End
  77.  
  78. Public Function getNumeroRegistros() As Integer
  79.    
  80.     Return lista.max
  81.    
  82. End
  83.  
  84. Public Sub modificar(d As Datos, i As Integer)
  85.    
  86.     Try lista[i] = d
  87.     If Error Then
  88.         Message.Error(("Se ha producido un error al intentar actualizar los datos"))
  89.     Else
  90.         Message.Info(("Registro modificado correctamente"))
  91.     Endif
  92.    
  93. End
  94.  
  95. Public Sub guardardatos()
  96.    
  97.     Dim contenido As String
  98.     Dim linearegistro As String
  99.     Dim registrotmp As Datos
  100.     Dim a As Integer
  101.    
  102.     For a = 0 To lista.max ' tambien vale lista.count-1
  103.         registrotmp = lista[a]
  104.        
  105.         linearegistro = registrotmp.asunto & "|" & registrotmp.color & "|" & registrotmp.descripcion & "|" & registrotmp.fecha
  106.        
  107.         contenido &= linearegistro & gb.Cr 'tambien vale poner "\n"
  108.     Next
  109.    
  110.     File.Save(RutaDatos, contenido)
  111.    
  112. End
  113.  
  114. Public Sub leerdatos()
  115.    
  116.     Dim contenido As String
  117.     Dim arrayLineas As String[]
  118.     Dim DatosLinea As String[]
  119.     Dim registrotmp As Datos
  120.     Dim a As Integer
  121.     Dim f As String 'fecha en formato texto
  122.    
  123.     contenido = File.Load(RutaDatos)
  124.    
  125.     arrayLineas = Split(contenido, gb.CrLf)
  126.    
  127.     For a = 0 To arrayLineas.Max
  128.         If arrayLineas[a] <> "" Then
  129.             DatosLinea = Split(arrayLineas[a], "|")
  130.            
  131.             registrotmp = New Datos 'esta linea es muy importante ya que reinstancia la variable
  132.             registrotmp.asunto = DatosLinea[0]
  133.             registrotmp.color = Val(DatosLinea[1])
  134.             registrotmp.descripcion = DatosLinea[2]
  135.             f = DatosLinea[3]
  136.             registrotmp.fecha = Date(Mid$(f, 7, Len(f)), Mid$(f, 1, 2), Mid$(f, 4, 2))
  137.             lista.Add(registrotmp)
  138.         Endif
  139.     Next
  140.    
  141. End
-
-
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. ' Gambas class file
  2.  
  3. Public Struct datos
  4.     asunto As String
  5.     color As Integer
  6.     fecha As Date
  7.     descripcion As String
  8. End Struct
  9.  
  10. Private ges As New GestionarDatos
  11.  
  12. Public Sub _new()
  13.    
  14.     limpio()
  15.    
  16. End
  17.  
  18. Public Sub Form_Open()
  19.    
  20.     Me.text = "Ejemplo de Estructuras: Programa Recordatorio"
  21.     Me.center
  22.    
  23. End
  24.  
  25. Public Sub ButtonAdd_Click()
  26.    
  27.     Dim registroTmp As Datos
  28.    
  29.     registroTmp = New Datos 'instancio
  30.     registroTmp.asunto = TextBoxAsunto.Text
  31.     registroTmp.color = ColorButtonNivelImportancia.Value
  32.     registroTmp.fecha = DateBoxFecha.Value
  33.     registroTmp.descripcion = TextAreaDescripcion.Text
  34.     'añado el regitro usando el método .add
  35.     ges.add(registroTmp)    
  36.     'borro datos
  37.     limpio()
  38.     'pongo el Id del registro
  39.     ValueBoxIndice.value = ges.getNumeroRegistros() + 1
  40.    
  41. End
  42.  
  43. '-------------------------------------
  44. Public Sub limpio()
  45.    
  46.     TextAreaDescripcion.text = ""
  47.     TextBoxAsunto.text = ""
  48.     ColorButtonNivelImportancia.value = Color.White
  49.     DateBoxFecha.value = Now 'fecha actual
  50.    
  51. End
  52.  
  53. Public Sub ButtonIr_Click()
  54.    
  55.     Dim registroTmp As Datos
  56.    
  57.     registroTmp = ges.rescata(ValueBoxIndice.value)
  58.    
  59.     If IsNull(registroTmp) Then
  60.         'el indice ha sido mal introducido y no puedo hacer nada....
  61.     Else
  62.        
  63.         TextBoxAsunto.text = registroTmp.asunto
  64.         TextAreaDescripcion.text = registroTmp.descripcion
  65.         DateBoxFecha.value = registroTmp.fecha
  66.         ColorButtonNivelImportancia.value = registroTmp.color
  67.     Endif
  68.    
  69. End
  70.  
  71. Public Sub ButtonBorrar_Click()
  72.    
  73.     'intengo borrar el indice indicado...
  74.     ges.erase(ValueBoxIndice.value)
  75.     If ges.erase(ValueBoxIndice.value) = True Then
  76.         limpio()
  77.     Endif
  78.    
  79. End
  80.  
  81. Public Sub ButtonPrimero_Click()
  82.    
  83.     ValueBoxIndice.value = 0
  84.     ges.setIndice(0)
  85.     ButtonIr_Click()
  86.    
  87. End
  88.  
  89. Public Sub ButtonUltimo_Click()
  90.    
  91.     ValueBoxIndice.value = ges.getNumeroRegistros()
  92.     ges.setIndice(ges.getNumeroRegistros())
  93.     ButtonIr_Click()
  94.    
  95. End
  96.  
  97. Public Sub ButtonAtras_Click()
  98.    
  99.     ges.setIndice(ges.getIndice() - 1)
  100.     ValueBoxIndice.value = ges.getIndice()  
  101.     ButtonIr_Click()
  102.    
  103. End
  104.  
  105. Public Sub ButtonSiguiente_Click()
  106.    
  107.     ges.setIndice(ges.getIndice() + 1)
  108.     ValueBoxIndice.value = ges.getIndice()  
  109.     ButtonIr_Click()
  110.    
  111. End
  112.  
  113. Public Sub ButtonModificar_Click()
  114.    
  115.     'segun el indice donde estoy, lo edito...
  116.     '
  117.     Dim registroTmp As Datos
  118.    
  119.     registroTmp = New Datos 'instancio
  120.     registroTmp.asunto = TextBoxAsunto.Text
  121.     registroTmp.color = ColorButtonNivelImportancia.Value
  122.     registroTmp.fecha = DateBoxFecha.Value
  123.     registroTmp.descripcion = TextAreaDescripcion.Text
  124.     'añado el regitro usando el método .add
  125.     ges.modificar(registroTmp, ValueBoxIndice.value)    
  126.    
  127. End
  128.  
  129. Public Sub ButtonLeerDatos_Click()
  130.    
  131.     ges.leerdatos()
  132.     ButtonPrimero_Click()
  133.    
  134. End
  135.  
  136. Public Sub ButtonGuardarDatos_Click()
  137.    
  138.     ges.guardardatos()
  139.    
  140. End
-

Descargar















No hay comentarios:

Publicar un comentario