|   FOROS      |     Tutoriales    |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 Arduino
   Elastix - VoIP Cosas de Windows Webs interesantes  Telecomunicaciones

 


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Nueva sección en esta web: Elastix - VoIP

¿Qué es esto?

- Monta un servidor telefónico en tu ordenador para poderte comunicar mediante tu móvil con otros móviles que estén en tu red Wifi. Parecido a Skipe o Whatsapp-teléfono, pero en este caso tú controlas al servidor.

- Si sabes abrir puertos del router, también puedes comunicarte con tu móvil de una red Wifi a teléfonos de otra red Wifi.

- También puedes comunicarte con teléfonos "normales", pero para eso necesitas un dispositivo que vale unos 60 €.

- Es muy recomendable aprender el funcionamiento de este servidor telefónico Asterisk-Elastix.

 Elastix - VoIP

 

B4A en español - Juan Antonio Villalpando
(BASIC4Android)

-- Tutorial de B4A --

Volver al índice del tutorial                    Return to index tutorial

____________________________

Basic4Android.

26B.- List, Type y Map.

Tutoriales. List, Type y Map.

Presentación

 

Hay varias formas de crear tablas, una de ella es en Base de datos tanto en MySQL como en SQLite, como veremos en otro tutorial, otra manera es mediante arrays (matrices, tablas), otra mediante List, otra mediante Map.
También es importante conocer como podemos crear Type de variables.

En este tutorial vamos a presentar List, Type y Map para trabajar con tablas de varias dimensiones.

Los ejemplos que vamos a ver se podrían hacer de otras maneras, pero aquí quiero poner una explicación didáctica que el lector acomodará a sus necesidades.

En principio comentaré List, después un ejercicio de List y Type y al final otro ejercicio de List y Map.

List y Map

_____________________________________

1.- List

Podemos tener una Lista, la lista es de una dimensión pero si utilizamos Type podemos jugar con varias dimensiones.

Una Lista sería esto...

Lista

Juan
Antonio
Pedro
Luis
Eva

Lista simple
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' Noviembre - 13
Dim Lista As List

End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
    Lista.Initialize

    Lista.Add("Juan")
    Lista.Add("Antonio")
    Lista.Add("Pedro")
    Lista.Add("Luis")
    Lista.Add("Eva")
Log(Lista) File.WriteList(File.DirRootExternal, "listado.txt", Lista) ' Lista = File.ReadList(File.DirRootExternal, "palabras.txt") End Sub Sub Activity_Resume End Sub Sub Activity_Pause (UserClosed As Boolean) End Sub

Es decir, he creado una Lista, la he inicializado y he añadido elementos.
Luego he guardado la Lista en un archivo y visualizo su contenido mediante la órden cat de LINUX.

 

Lista.RemoveAt(3) ' Borra a "Luis". La Lista comienza por 0, luego el elemento 3 es "Luis"

Lista.InsertAt(1,"Enrique") ' Inserta después de "Antonio" a "Enrique"

nombre = Lista.Get(2) ' Asigna a nombre el elemento 2 de la Lista, es decir a "Enrique"     nombre = "Enrique"

Lista.Set(2, "Alfredo") ' Cambia el elemento 1 que es "Antonio" por "Alfredo".

Lista.Size ' Tamaño de la Lista, en nuestro caso 5 elementos.

Lista.Clear ' Borra la Lista.

File.WriteList(File.DirRootExternal, "personas.txt", Lista) ' Guarda la Lista en el archivo personas.txt en la SDCard.
Lista = File.ReadList(File.DirRootExternal, "personas.txt") ' Toma el archivo personas.txt que está en la SDCard e introduce su contenido en Lista.

Como hemos visto List solo permite guardar una dimensión, no podemos guardar dos, tres, o más dimensiones como se podría hacer con los arrays (matrices).
Pero podemos crear una variable que a su vez contenga varios elementos de tal manera que al guardar esa variable en la Lista estamos guardando los varios elementos que contiene.

Es decir, si consigo tener una variable llamada persona(33, Juan, Vargas) y guardo esa variable en la Lista, estaré guardando tres valores en cada variable.

Para crear una variable que pueda contender varios datos utilizamos Type.
(Más abajo en este tutorial utilizaremos otra forma de hacerlo con Map)


_____________________________________

2.- Type

Podemos tener una variable que tenga varias "cosas" dentro, por ejemplo

Type persona(edad As Int, nombre As String, apellido As String)

Hemos creado un Type de variable llamada persona que a su vez contiene tres datos.

Una vez creada este Type de variable, podemos declararla a una variable, por ejemplo:

Dim humano As persona

Del tal manera que humano puede contener tres datos:

humano.edad = 33
humano.nombre = Juan
humano.apellido = Vargas

Así que cuando trabajemos con la variable humano, podemos trabajar con tres datos que tiene en su interior.

persona

edad= nombre= apellido=

 


_____________________________________

3.- List y Type

Vamos a realizar un programa ejemplo para estudiar List y Type a la vez.

Tipo de acento (agudo, grave o esdrújulo) según la palabra.

Bien, después de todo esto vamos a realizar un programa didáctico.

Consiste en que tenemos una Lista con palabras y su tipo de acentuación (aguda, grave y esdrújula).
Intruducimos en un casillero una palabra. Cuando pulsemos un Botón, se consultará en la Lista si existe esa palabra, y en caso que exista nos indicará su tipo de acentuación.

Designer


 

- Mediante el Designer creamos un Layout que llamaremos "layout".

- Insertamos un Label1 con el Texto: "Introduce una palabra"

- Un EditText1

- Un Button con el Texto: "Pulsa"

- Un Label2.

NOTA: aunque este programa es para obtener el tipo de acento de una palabra, tanto las palabras de ejemplo (camion, cancion) como las palabras que pongamos en el casillero no llevarán tilde, ya que el emulador que tengo configurado no las admite.
Cuando pases el programa al móvil, cambias las palabras (camión, canción) poniéndoles las tildes.

Recordamos que las palabras según el tipo de acento pueden ser agudas, graves (o llanas), esdrújulas y sobresdrújulas.

Código del programa en Basic4Android
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' Noviembre - 13
Type palabra_tipo(palabra As String, tipo As String)
Dim registro As palabra_tipo
Dim Lista As List
Dim entrada As String
Dim i As Int

End Sub

Sub Globals
Dim Label1, Label2 As Label
Dim EditText1 As EditText
Activity.LoadLayout("layout")

End Sub


Sub Activity_Create(FirstTime As Boolean)
registro.Initialize
Lista.Initialize

Dim registro As palabra_tipo
registro.palabra="camion"
registro.tipo="aguda"
Lista.Add(registro)

Dim registro As palabra_tipo
registro.palabra="casa"
registro.tipo="grave"
Lista.Add(registro)

Dim registro As palabra_tipo
registro.palabra="cancion"
registro.tipo="aguda"
Lista.Add(registro)

' File.WriteList(File.DirRootExternal, "palabras.txt", Lista)
' Lista = File.ReadList(File.DirRootExternal, "palabras.txt")


 ''''''''''''''''''''''''''''''''''''''''''
 ' Guardar la información de la Lista en un archivo

   Dim Ra As RandomAccessFile
   If File.Exists(File.DirRootExternal,"palabras.txt") Then
      File.Delete(File.DirRootExternal,"palabras.txt")
   End If

   Ra.Initialize(File.DirRootExternal,"palabras.txt",False)
      For l=0 To Lista.Size-1
         Ra.WriteObject(Lista.Get(l),True,Ra.CurrentPosition)
      Next
   Ra.Close
   
  ' Tomar la información del archivo y meterlo en la Lista
   Lista.Initialize
   Ra.Initialize(File.DirRootExternal,"palabras.txt",True)
      Do While Ra.CurrentPosition < Ra.Size
         registro=Ra.ReadObject(Ra.CurrentPosition)
         Lista.Add(registro)
      Loop
   Ra.Close
End Sub Sub Activity_Resume End Sub Sub Activity_Pause(UserClosed As Boolean) End Sub Sub Button1_Click entrada = EditText1.Text For i = 0 To Lista.Size - 1 registro = Lista.Get(i) If entrada = registro.palabra Then Label2.Text="La palabra " & entrada & " es " & registro.tipo End If Next End Sub

Comentario

Creamos un Type de variable llamada palabra_tipo que contendrá dos valores.
Type palabra_tipo(palabra As String, tipo As String)
Creamos la variable llamada registro cuya forma será la del tipo palabra_tipo.
Dim registro As palabra_tipo

Creamos una Lista que contendrá a cada registro.

Asignamos a cada variable registro el par de datos de palabra y tipo.
Luego añadimos a la Lista, la variable registro que contiene el par de datos.

Importante: Fijate que cada vez que introducimos un dato en la variable registro, debemos volver a declararla:

Dim registro As palabra_tipo

Si no lo hiciéramos la variable siempre seria la misma y contendría el mismo valor.

Cuando pulsamos el botón, el bucle For comienza en el primer elemento de la Lista, que es el 0
Hasta el último, que es Lista.Size - 1

Si la palabra que hemos puesto en el EditText1 y que hemos asignado a la variable entrada,
es igual a la palabra registro.palabra que en esos momentos está leyendo el bucle, entonces
en el Label2 se escribe la palabra y su tipo de acento.

- Insisto que esto es solo un ejercicio de aprendizaje, la introducción de datos en la Lista se podría haber realizado mediante:

un bucle For,
un array Lista.AddAll(Array As Int(1, 2, 3, 4, 5))
un archivo Lista = File.ReadList(File.DirRootExternal, "palabras.txt")

- Si guardamos la información de la Lista en un archivo y en la SDCard, obtendríamos este formato:

La forma de guardar/recuperas una Lista con Type en un archivo es la que he indicado en el código:

 ''''''''''''''''''''''''''''''''''''''''''
 ' Guardar la información de la Lista en un archivo

   Dim Ra As RandomAccessFile
   If File.Exists(File.DirRootExternal,"palabras.txt") Then
      File.Delete(File.DirRootExternal,"palabras.txt")
   End If

   Ra.Initialize(File.DirRootExternal,"palabras.txt",False)
      For l=0 To Lista.Size-1
         Ra.WriteObject(Lista.Get(l),True,Ra.CurrentPosition)
      Next
   Ra.Close
   
  ' Tomar la información del archivo y meterlo en la Lista
   Lista.Initialize
   Ra.Initialize(File.DirRootExternal,"palabras.txt",True)
      Do While Ra.CurrentPosition < Ra.Size
         registro=Ra.ReadObject(Ra.CurrentPosition)
         Lista.Add(registro)
      Loop
    Ra.Close


Lista

palabra=camion, tipo=aguda
palabra=casa, tipo=grave
palabra=cancion, tipo=aguda

Gracias al Type podemos introducir en cada línea de la Lista dos datos.


_____________________________________

4.- Map

Map es otra manera de guardar en una variable varios valores.

Mapa

Nombre= Apellido= Edad=

Map guarda parejas de clave y valor. ("Nombre"="Juan")

Pero atención un Map no es una lista. Un Map sería como una línea de la Lista.

Por ejemplo si hacemos esto...

    Mapa.Put("Nombre", "Juan")
    Mapa.Put("Apellido", "Vargas")
    Mapa.Put("Edad", "33")
    
    Mapa.Put("Nombre", "Antonio")
    Mapa.Put("Apellido", "Casas")
    Mapa.Put("Edad", "44")
    Log(Mapa)

      

No se guardaría la información de Juan y Antonio, solo se guardaría la última (Antonio) que sobrescribiría a la primera (Juan).

Así que el Map se suele utilizar para tomar o poner líneas en una Lista, para que cada línea de la lista contenga varios valores.

Tanto el Map como el List comienza por el elemento 0.

List y Map (I)
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' Noviembre - 13
Dim Lista As List
Dim Mapa As Map

End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
    Lista.Initialize
    Mapa.Initialize

    Lista.Add("Juan")
    Lista.Add("Antonio")
    Lista.Add("Pedro")
    Lista.Add("Luis")
    Lista.Add("Eva")
    Log(Lista)
    
    Mapa.Put("Nombre", "Juan")
    Mapa.Put("Apellido", "Vargas")
    Mapa.Put("Edad", "33")
    
    Mapa.Put("Nombre", "Antonio")
    Mapa.Put("Apellido", "Casas")
    Mapa.Put("Edad", "44")
    Log(Mapa)
    
    Log(Mapa.Get("Nombre"))
    Log(Mapa.Get("Apellido"))
    Log(Mapa.Get("Edad"))

 File.WriteList(File.DirRootExternal, "listado.txt", Lista)
' Lista = File.ReadList(File.DirRootExternal, "palabras.txt")

File.WriteMap(File.DirRootExternal, "mapa.txt", Mapa)

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

_____________________________________

5.- List y Map

Así que vamos a hacer convivir al Map y al List.

Con el Map creamos parejas (3 parejas en este ejemplo) de valores e
introducimos toda la línea Map en cada línea List.

El Map lo utilizamos para introduicir y obtener filas del List, pero en Map no guarda todo el conjunto de datos, solo guarda los de la última línea utilizada.

Lista

Nombre=Juan, Apellido=Vargas, Edad=33
Nombre=Antoni., Apellido=Casas, Edad=44
Nombre=Pedro, Apellido=Ruiz, Edad=55
Nombre=Luis, Apellido=Libre, Edad=66

Gracias al Map podemos introducir en cada línea de la Lista tres datos.

List y Map (II)
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' Noviembre - 13
Dim Lista As List
Dim Mapa As Map

End Sub

Sub Globals

End Sub

Sub Activity_Create(FirstTime As Boolean)
    Lista.Initialize
    
    ' Cada vez que introducimos datos en el Map lo inicializamos previamente.
    Mapa.Initialize
    Mapa.Put("Nombre", "Juan")
    Mapa.Put("Apellido", "Vargas")
    Mapa.Put("Edad", "33")
    Lista.Add(Mapa)
    
    Mapa.Initialize
    Mapa.Put("Nombre", "Antonio")
    Mapa.Put("Apellido", "Casas")
    Mapa.Put("Edad", "44")
    Lista.Add(Mapa)
    
    Mapa.Initialize
    Mapa.Put("Nombre", "Pedro")
    Mapa.Put("Apellido", "Ruiz")
    Mapa.Put("Edad", "55")
    Lista.Add(Mapa)
    
    Mapa.Initialize
    Mapa.Put("Nombre", "Luis")
    Mapa.Put("Apellido", "Libre")
    Mapa.Put("Edad", "66")
    Lista.Add(Mapa)
    
    ' Presentamos la Lista completa
    Log(Lista)
    
    ' Presentamos el elemento 2 de la Lista
    Lista.Get(2)
    Log(Lista.Get(2))
    
    
    ' Recuperamos la línea 2 de la Lista y la asignamos al Mapa
    Mapa = Lista.Get(2)
    ' Presentamos cada dato obtenido.
    Log(Mapa.Get("Nombre"))
    Log(Mapa.Get("Apellido"))
    Log(Mapa.Get("Edad"))

 File.WriteList(File.DirRootExternal, "listado.txt", Lista)
' Lista = File.ReadList(File.DirRootExternal, "palabras.txt")

File.WriteMap(File.DirRootExternal, "mapa.txt", Mapa)

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''
   Log(Lista)

(ArrayList) [
{Nombre=Juan, Apellido=Vargas, Edad=33},
{Nombre=Antonio, Apellido=Casas, Edad=44},
{Nombre=Pedro, Apellido=Ruiz, Edad=55},
{Nombre=Luis, Apellido=Libre, Edad=66}
] ''''''''''''''''''''''''''''''''''''''''''''''''''''''' Log(Lista.Get(2)) {Nombre=Pedro, Apellido=Ruiz, Edad=55} ''''''''''''''''''''''''''''''''''''''''''''''''''''''' Log(Mapa.Get("Nombre")) Log(Mapa.Get("Apellido")) Log(Mapa.Get("Edad")) Pedro
Ruiz
55

________________________________

Si quieres que este tutorial se mantenga y lo actualice con más programas, escríbeme un correo a Juan Antonio: juana1991@yahoo.com

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información