Acción "Abrir"
¿Qué se supone que debe hacer?. Pues preguntarle al usuario por un archivo, leerlo y cargar el contenido en el ListBox. Veamos directamente la acción correspondiente:
PUBLIC SUB Abrir_Click()
DIM c AS String
DIM arr_cadenas AS String[]
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = [ "Datos de agenda (*.data)", "Todos los ficheros (*.*)" ]
IF NOT Dialog.OpenFile() THEN
arr_cadenas = Split(File.LOAD(Dialog.Path), "\n")
ListBox1.Clear()
FOR EACH c IN arr_cadenas
ListBox1.Add(c)
NEXT
END IF
END
Este trozo de código se nos presenta una característica muy interesante de Gambas, las clases "no instanciables" o estáticas ( 3). Son clases que no pueden instanciarse pero pueden utilizarse directamente. En esta acción vemos en acción dos de estas clases: la clase " File" y "Dialog".
Por ejemplo, la clase Dialog proporciona acceso a los típicos cuadros de diálogo de selección de ficheros, colores, etc. Está documentada en gb.qt
En nuestra aplicación, queremos seleccionar un fichero y cargarlo. Para hacer ésto, utilizaremos la clase Dialog de la siguiente forma:
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = [ "Datos de agenda (*.data)", "Todos los ficheros (*.*)" ]
IF NOT Dialog.OpenFile() THEN
' etc ...
Ajustamos el título del cuadro de diálogo, proporcionamos un filtro para la selección del tipo de fichero por extensión y finalmente invocamos el método OpenFile() de la clase. Curiosamente, si NO se selecciona un fichero (el usuario pulsa "Cancelar", etc ...), el valor de retorno del método OpenFile() es True. Una vez seleccionado el fichero por parte del usuario, podemos acceder a la ruta completa con la propiedad Dialog.Path
La clase File (su documentación se encuentra "colgando" de la entrada gb) proporciona varios métodos para trabajar con ficheros.
En la documentación de Gambas, en la sección "How do I ..." se muestran varios ejemplos para leer y escribir ficheros. Nosotros vamos a utilizar en nuestra aplicación el método Load(), que recibe como argumento la ruta de un fichero y devuelve un String con todo el contenido del fichero. Para separar las líneas que contiene el fichero, utilizamos la función Split(), que toma como argumentos la cadena que queremos "partir", el carácter a utilizar como separador (un salto de línea en nuestro caso, " \n") y devuelve un Array de Strings. Por ello hemos declarado la variable arr_cadenas como String[]:
DIM arr_cadenas AS String[]
Una vez que tenemos la lista de cadenas contenidas en el fichero, limpiamos el ListBox y vamos añadiendo una a una cada cadena utilizando el método Add() del ListBox.
Acción "Guardar"
Al pulsar el botón "Guardar" o la entrada equivalente en el menú, el programa debe volcar los contenidos a un fichero de texto. Mostraremos un cuadro de diálogo al usuario para que nos proporcione el nombre del fichero a utilizar. Este es el código correspondiente:
PUBLIC SUB Guardar_Click()
lineas AS String
destino AS String
numArchivo AS Integer
lineas = ListBox1.Contents
Dialog.Title = "Seleccione un archivo"
Dialog.Filter = [ "Datos de agenda (*.data)" ]
IF NOT Dialog.SaveFile() THEN
IF Right$(Dialog.Path, 5) <> ".data" THEN
destino = Dialog.Path & ".data"
ELSE
destino = Dialog.Path
END IF
File.Save(destino, lineas)
END IF
END
No hay comentarios:
Publicar un comentario