MÓDULO 05: Desarrollo de aplicaciones
​
Lenguaje de programación a utilizar:
Visual Basic Express 2000.

TAREA 3. Gestión de base de datos

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Con lo que has aprendido hasta ahora, ya puedes crear programas, pero todavía con una limitación significativa. Ejecutamos un programa, introducimos datos escribiéndolos en cuadros de texto, los datos son procesados de acuerdo a nuestras instrucciones y después se muestran los resultados. Después de eso, tenemos que empezar de nuevo como si nada se hubiera guardado. En programación podemos usar archivos para Leer datos, como para guardar resultados. Esto se puede hacer simplemente usando archivos de texto normales o incluso potentes bases de datos.
Leer datos de un archivo de texto
En este ejemplo, vamos a leer los contenidos de un archivo de texto (con extensión.txt) y mostrarlos en un cuadro de texto. Usamos un archivo de texto llamado nombres.txt que está almacenado dentro de la carpeta de nuestro proyecto. Si abrimos ese archivo de texto con Bloc de notas, lucirá así.
Crearemos un formulario con un botón y un cuadro de texto: textBox1



¡La importancia de saber cuándo parar!
Nosotros podemos leer un documento en un papel y saber exactamente cuando termina porque al final no hay más palabras. En cambio, en las computadoras este aspecto se encarga los streams de datos y necesitan una forma que les señale que se ha llegado al final de un archivo o documento de datos. Esto se logra con un carácter especial llamado EOF (End Of File/ Fin de archivo) que se coloca al final de cada archivo para que los programas de computación sepan cuándo dejar de leer ese archivo. EOF es uno de los caracteres de control no imprimibles de los caracteres de codificación estándar ASCII.

Ahora veamos el código del botón de comando: “Leer el archivo”, que nos permitirá “leer” el archivo de texto.

Explicación del código:
​
Primero, definimos la variable archivo tipo String para que contenga la ruta de nuestro archivo de texto incluyendo el nombre de archivo.
Después, declaramos la variable leer como nuevo objeto new StreamReader. StreamReader es el objeto que lee streams de texto y es la forma que tiene Visual Basic de leer archivos de texto. Al mismo tiempo, le damos la ruta del archivo que queremos leer usando la variable archivo que hemos creado anteriormente.
De esta manera, con la línea:
Dim leer As New System.I0.StreamReader (archivo)
Le indicamos a Visual Basic que vamos a abrir el archivo nombres.txt y usamos la variable leer para referirnos a él.
Con la línea:
TextBox1.Text = leer.ReadToEnd
Llamamos a la función ReadToEnd en nuestro archivo de texto, que nos devolverá todo el contenido del archivo y lo asignamos a nuestro cuadro de texto para su presentación.
Finalmente, después de haber terminado de usar un archivo de texto, debemos siempre cerrarlo con la instrucción leer.Close( ), de otra manera podríamos obtener errores más adelante en nuestro programa.
Leer datos de un archivo de texto y procesarlos línea por línea
La mayoría de las veces, queremos que nuestros programas lean datos de un archivo y hagan algo con ellos, en vez de solo presentarlos. En este ejemplo, crearemos un programa que lee los nombres y contraseñas de usuarios de un archivo de texto e implementa un procedimiento simple de inicio de sesión. Este es el archivo passwords.txt que usamos.
Al usuario se le pide que ingrese el nombre de usuario y su contraseña y el programa verificara si es la combinación correcta, en cuyo caso se muestra un mensaje de inicio de sesión exitosa, en caso contrario mostrara un mensaje de error.




Explicación del código del botón: “inicio de sesión”.
En vez de leer todo el archivo de una vez, usamos la función ReadLine, que lee el archivo línea por línea. Así, tenemos ReadLine dentro de un bucle y cada vez que se ejecuta, la respuesta es una línea del archivo.
El bucle Do While Leer.Peek() <> -1 usa la función Peek que lee los caracteres de texto entrantes. Es decir lee un carácter a la vez. Si no ve más caracteres, la respuesta es -1, señalando que se ha llegado al final del archivo. Así que básicamente el bucle se ejecuta mientras haya texto que leer en el archivo.
Dentro del bucle, la línea:
Linea = Leer.ReadLine () lee la línea actual del archivo y la guarda en la variable de Línea tipo String.
Para continuar, debemos procesar la línea texto. Es así que queremos separar o romper la línea en dos partes: el nombre de usuario y la contraseña. Esto se hace con la línea MatrizLinea = Linea.Split(“,”).
Aquí aplicamos la función Split a nuestra línea y le decimos que separe el string usando la coma, como separador. La función Split da como respuesta una matriz poblada con todos los elementos que fueron separados por una coma. En este caso la matriz MatrizLinea tiene dos elementos. MatrizLinea(0) que contiene el nombre de usuario y MatrizLinea(1) que contiene la contraseña de la línea actual.
La estructura If, Verifica si el nombre de usuario y contraseña que el usuario proporcionó, coinciden con el par nombre de usuario/contraseña que extrajimos de la línea actual del archivo de texto. Fíjate aquí que usamos la función Trim. La función Trim quita cualquier espacio en blanco que se pueda presentar antes o después del texto que está dentro de una variable string. Debemos hacer esto porque hay un espacio después de cada coma dentro de nuestro archivo, por lo que necesitamos quitar ese espacio antes de verificar si las contraseñas coinciden.
Si coincide el par nombre de usuario/contraseña, mostraremos un cuadro de dialogo con un mensaje de inicio de sesión exitoso. También asignamos a la variable lógica login de tipo Boolean a True. Vamos a usar esa variable después del bucle para verificar si el inicio de sesión fue exitoso o no, para que podamos mostrar un mensaje apropiado de fallo de inicio de sesión. Igualmente, si el par coincide, usamos la instrucción Exit Do para romper o salir del bucle, ya que no hay necesidad de seguir verificando el resto de las líneas.
Escribir datos en un archivo de texto
Veamos ahora cómo podemos guardar datos en un archivo de texto. En este ejemplo, le pedimos al usuario que proporcione el nombre de usuario y la contraseña para un nuevo usuario, que lo anexaremos al final de nuestro archivo passwords.txt.
Creamos una forma simple.


Veamos el código detrás del botón Crear usuario.

Para escribir en un archivo, usamos el objeto StreamWriter. Aquí, con el archivo password.txt donde queremos escribir, también proporcionamos un parámetro adicional True (Verdadero) que significa que queremos agregar texto al final de nuestro archivo.
Si omitimos el segundo parámetro “True”, significa que queremos borrar los contenidos del archivo con ruta Archivo y reemplazarlo con un nuevo texto. Igualmente, si el archivo no existe, obtendremos un error.
Pero, si el segundo parámetro es False (Falso), esto significa que queremos crear el archivo en la ruta que le hemos asignado a la variable Archivo, si no existiera. Si existe, esta instrucción funciona como la anterior, reemplazando los contenidos viejos por nuevos.
Finalmente, la línea
Escribir.WriteLine(Linea)
Escribe al final de nuestro archivo los contenidos de la variable Linea, que hemos ingresado en los cuadros de texto: TextBox1 y textBox2 separados por una coma.
Es seguro que si verificamos el archivo passwords.txt, veremos la línea con el nuevo par nombre de usuario/contraseña añadido al final.
¡MANTENTE SEGURO!
​
Fíjate que nunca debes usar archivos de texto para guardar contraseñas en una aplicación de la vida real ya que no es seguro y cualquiera puede abrir el archivo y simplemente leer las contraseñas. En los ejemplos anteriores solo lo usamos para demostrar operaciones simples de entrada/salida con archivos de texto.
Ordenar texto
​
A veces necesitas clasificar una lista de datos (strings) en tu programa. Si solo quieres mostrar la lista de datos ordenadas, entonces la forma más fácil es usar un control TextBox y fijar su propiedad Sorted (ordenar) a True (verdadero).
​
Vamos a recordar nuestro primer ejemplo, donde nuestro programa leía algunos nombres de un archivo de texto y los mostraba en un cuadro TextBox. Ahora, queremos clasificar esos nombres así que añadimos un botón Ordenar.


Aquí está el código detrás del botón Ordenar.

La forma más fácil de organizar una lista de elementos es la de ponerlos en una matriz y llamar a la función Sort a esa matriz, que hace la clasificación de una manera fácil y rápida.
Con la línea
Dim Matriznombres() As String
Creamos la variable tipo matriz MatrizNombres. Fíjate que no definimos un tamaño de matriz dentro de los paréntesis. Esto es porque no sabemos el tamaño que vamos a necesitar, pero tampoco nos importa porque la función Split en la línea siguiente va a asignar un tamaño a nuestra matriz automáticamente.
Con la línea
MatrizNombres = TextBox1.Text. Split (New String() {Environment.NewLine}, StringsSplitOptions.None)
llamamos a la función Split para almacenar los contenidos a nuestro cuadro TextBox1, que separa los nombres línea por línea y puebla la matriz MatrizNombres. No te preocupes por el extraño parámetro que le damos a Split. Es solo una forma más sofisticada de decir que queremos partir nuestro texto usando la nueva línea de caracteres (que es invisible) como separador. Si el texto que quieres separar tiene una forma más simple, como una coma, puedes llamar a Split (,).
La línea
Array.Sort(MatrizNombres)
Ordena los contenidos de nuestra matriz. Ahora, MatrizNombres está ordenado.
Finalmente, la línea
TextBox1.Text = String.Join(vbNewLine, Matriznombres)
Muestra los resultados ordenados en el mismo cuadro de texto. La función Join hace lo opuesto que Split. Toma una matriz (MatrizNombres - segundo parámetro) y un separador (vbNewLine - primer parámetro) y produce una secuencia única con todos los elementos unidos y separados por el separador que proporcionamos como el primer parámetro.