A continuación encontrarás traducido al castellano el artículo escrito por Gabriel Ludosanu y publicado originalmente en el Blog de Xojo.
Como desarrolladores es frecuente que tengamos que trabajar con archivos de texto, ya se trate de leer ajustes de configuración, tratar archivos de registro o bien generar reportes, entre otros casos. Los archivos de texto son una parte común en el desarrollo de software, y saber como manipularlos es importante a la hora de crear aplicaciones Xojo que sean flexibles.
En este artículo empezaré haciendo uso de las clases y técnicas de Xojo a la hora de tratar con archivos de texto. Comenzaremos viendo como leer los contenidos de los archivos de texto utilizando la clase TextInputStream. Aprenderás como puedes leer todo el contenido de un archivo de texto en una cadena y también cómo procesar su contenido línea a línea.
Luego veremos como escribir archivos de texto usando para ello la clase TextOutputStream. Mediante los ejemplos verás como se puede escribir todo el contenido de una cadena de texto sobre el archivo y también cómo puedes escribir las líneas de una en una, lo cual resulta de utilidad cuando quieres generar un archivo de registro o bien guardar las preferencias del usuario.
Cuando termines de leer este artículo comprenderás mejor las principales técnicas a la hora de acceder, leer y escribir archivos de texto en tus aplicaciones Xojo. Estas capacidades te permitirán escribir software más robusto y flexible que podrás utilizar con un amplio rango de fuentes de datos y formatos.
Leer Archivos de Texto
Cuando se trata de leer los contenidos de un archivo de texto en Xojo, la clase TextInputStream es la principal herramienta a utilizar. Esta clase proporciona los métodos necesarios tanto para leer todo el contenido del archivo como para hacerlo línea a línea.
Uso de TextInputStream para Abrir y Leer Archivos de Texto
Este es un ejemplo que demuestra como leer todo el contenido de un archivo de texto para asignarlo a una cadena:
// Paso 1: Abrir el Archivo Var file As FolderItem file = FolderItem.ShowOpenFileDialog("text/plain") // Muestra el diálogo para la selección de un archivo de texto If file <> Nil Then // Paso 2: Crea una instancia dea TextInputStream Var inputStream As TextInputStream inputStream = TextInputStream.Open(file) // Paso 3: Lee el Archivo Var fileContents As String fileContents = inputStream.ReadAll // Paso 4: Cierra el Stream inputStream.Close // Muestra el contenido del archivo (para el propósito de esta demostración) MessageBox(fileContents) Else MessageBox("No se ha seleccionado ningún archivo.") End If
En este ejemplo:
- Se utiliza el método FolderItem.ShowOpenFileDialog para mostrar un diálogo que permite al usuario seleccionar un archivo de texto.
- El método TextInputStream.Open abre el archivo seleccionado en modo de lectura.
- El método ReadAll lee todos los contenidos del archivo asignándolos a la variable de tipo String fileContents.
- El método Close cierra el TextInputStream.
Esta aproximación es útil cuando necesitas procesar todos los contenidos de un archivo de texto a la vez. Sin embargo, para archivos de gran tamaño es probable que quieras procesar los contenidos línea a línea para hacer un uso más eficiente de la memoria, lo cual se cubre en la siguiente sección.
Usar TextInputStream para Leer Línea a Línea
La lectura de un archivo de texto línea a línea es más eficiente, especialmente cuando se trata de archivos de gran tamaño. Este método te permite procesar de forma individual cada línea, reduciendo así el uso de memoria y permitiéndote gestionar grupos de datos también de forma más eficaz.
Este es un ejemplo en el que se muestra como leer un archivo de texto línea a línea en Xojo:
// Paso 1: Abrir el archivo Var file As FolderItem file = FolderItem.ShowOpenFileDialog("text/plain") // Muestra el diálogo de selección de archivo If file <> Nil Then // Paso 2: Crea un TextInputStream Var inputStream As TextInputStream inputStream = TextInputStream.Open(file) // Paso 3: lee cada línea Var line As String While Not inputStream.EndOfFile line = inputStream.ReadLine // Procesa cada línea (para los propósitos de esta demostración simplemente mostraremos la línea en un diálogo de mensaje) MessageBox(line) Wend // Paso 4: Cierra el Stream inputStream.Close Else MessageBox("No se ha seleccionado ningún archivo.") End If
Esta aproximación es particularmente útil cuando necesitas procesar o analizar cada línea de un archivo de texto de forma independiente, como por ejemplo cuando se parsea un archivo de registro o en la lectura de ajustes de configuración.
Escribir Archivos de Texto
Escribir archivos de texto en Xojo es tan sencillo como leerlos. La clase TextOutputStream te permite escribir datos a archivos de texto, ya sea todos a la vez o bien línea a línea.
Usar TextOutputStream para Escribir Archivos de Texto Completos
Sigue estos pasos para escribir un texto completo sobre un archivo:
// Paso 1: Permite que el usuario defina la ruta y el nombre del archivo de texto que se va a crear Var file As FolderItem file = FolderItem.ShowSaveFileDialog("text/plain", "example.txt") // Muestra el diálogo para guardar un archivo, de modo que se puede indicar su nombre y ruta. If file <> Nil Then // Paso 2: Crea un TextOutputStream Var outputStream As TextOutputStream outputStream = TextOutputStream.Create(file) // Paso 3: Escribe en el archivo Var fileContents As String = "¡Hola, Xojo!" outputStream.Write(fileContents) // Paso 4: Cierra el Stream outputStream.Close MessageBox("Se ha creado el archivo con éxito.") Else MessageBox("No se ha indicado ningún archivo.") End If
En este ejemplo:
- Se utiliza el método FolderItem.ShowSaveFileDialog para mostrar el diálogo que permite indicar el nombre y ruta en el que se va a generar el archivo.
- El método TextOutputStream.Create crea un nuevo archivo o sustituye un archivo ya existente.
- El método Write escribe los contenidos de la variabel de tipo String fileContents en el archivo.
- El método Close cierra el TextOutputStream.
Usar TextOutputStream para Escribir Línea a Línea
Escribir un archivo línea a línea resulta de utilidad cuando has de escribir datos de forma incremental o bien gestionar grandes bloques de datos.
Sigue estos pasos para escribir un archivo línea a línea:
// Paso 1: Permite que el usuario defina el nombre del archivo de texto que se va a crear, así como su ubicación Var file As FolderItem file = FolderItem.ShowSaveFileDialog("text/plain", "example.txt") // Muestra el diálogo que permite indicar el archivo If file <> Nil Then // Paso 2: Crea un TextOutputStream Var outputStream As TextOutputStream outputStream = TextOutputStream.Create(file) // Paso 3: Escribe cada línea Var lines() As String = Array("Line 1", "Line 2", "Line 3") For Each line As String In lines outputStream.WriteLine(line) Next // Paso 4: Cierra el Stream outputStream.Close MessageBox("Archivo creado con éxito.") Else MessageBox("No se ha indicado ningún archivo.") End If
En este ejemplo:
- Se utiliza el método FolderItem.ShowSaveFileDialog para mostrar el diálogo que permite al usuario indicar el nombre y la ubicación del archivo que se va a crear.
- El método TextOutputStream.Create crea un nuevo archivo o bien sustituye a un archivo ya existente.
- El método WriteLine escribe en el archivo cada una de las líneas encontradas en el array.
- El método Close cierra el TextOutputStream.
Mediante la comprensión de estos métodos puedes elegir cuál se ajusta mejor a tus necesidades. Por ejemplo, escribir todos los contenidos de texto a la vez resulta útil para pequeños grupos de datos o bien cuando quieres escribir todos los datos de forma simultánea. La escritura línea a línea es más eficiente en el caso de grandes cantidades de datos o bien cuando necesitas escribir de forma incremental.
Conclusión
Este artículo te ha proporciona los conocimientos necesarios para que puedas gestionar los archivos de texto en Xojo utilizando las clases TextInputStream y TextOutputStream. Hemos cubierto las siguientes técnicas esenciales:
Leer archivos de texto:
- Leer todo el archivo en una cadena mediante el uso de TextInputStream.ReadAll.
- Leer archivos línea a línea utilizando TextInputStream.ReadLine.
Escribir archivos de texto:
- Escribir todos los datos de texto a un archivo utilizando TextOutputStream.Write.
- Escribir los datos de texto línea a línea utilizando TextOutputStream.WriteLine.
Prueba a aplicar estas técnicas en tus propios proyectos. Experimenta con los diferentes métodos para ver cómo pueden ayudarte a gestionar tus archivos de texto de forma más eficiente. La documentación oficial de Xojo sobre el uso de archivos de texto es un gran recurso en el que puedes encontrar información adicional.
¿Listo para empezar? ¡Descarga Xojo de forma gratuita y empieza a crear tus aplicaciones hoy mismo!
¡Feliz programación!