6. Los archivos de texto
Un archivo de texto es un archivo que contiene líneas de texto. Veamos la creación y el uso de este tipo de archivos con algunos ejemplos.
6.1. Creación y uso
Programa |
![]() |
Resultados |
Comentarios
- La línea 7 crea un objeto de archivo de tipo «Scripting.FileSystemObject» mediante la función CreateObject("Scripting.FileSystemObject"). Este tipo de objeto permite acceder a cualquier archivo del sistema, no solo a archivos de texto.
- La línea 9 crea un objeto «TextStream». La creación de este objeto está vinculada a la creación del archivo testfile.txt. Este archivo no se identifica con un nombre absoluto del tipo c:\dir1\dir2\....\testfile.txt, sino con un nombre relativo: testfile.txt. Por lo tanto, se creará en el directorio desde donde se ejecute el comando para abrir el archivo.
- El sistema de archivos de Windows no reconoce conceptos como «archivo de texto» o «archivo que no es de texto». Solo reconoce archivos. Por lo tanto, es el programa que utiliza este archivo el que debe determinar si lo tratará como un archivo de texto o no.
- La línea 9 crea un objeto a partir del cual se utiliza el comando set para la asignación. La creación de un objeto de archivo de texto implica la creación de dos objetos:
- la creación de un objeto Scripting.FileSystemObject (línea 7)
- y luego la creación de un objeto «TextStream» (archivo de texto) mediante el método OpenTextFile del objeto Scripting.FileSystemObject, que admite varios parámetros:
- el nombre del archivo a procesar (obligatorio)
- el modo de uso del archivo. Es un número entero con 3 valores posibles:
- 1: uso del archivo en modo de lectura
- 2: uso del archivo en modo de escritura. Si aún no existe y el tercer parámetro está presente y tiene el valor «true», se crea; de lo contrario, no. Si ya existe, se sobrescribe.
- 8: uso del archivo en modo de adición, c.a.d. Escribe al final del archivo. Si el archivo aún no existe y el tercer parámetro está presente y tiene el valor «true», se crea; de lo contrario, no se crea.
- La línea 11 escribe una línea de texto con el método WriteLine del objeto TextStream creado.
- La línea 13 «cierra» el archivo. A partir de ahí, ya no se puede escribir ni leer en él.
- La línea 16 crea un nuevo objeto «TextStream» para procesar el mismo archivo que antes, pero esta vez en modo «agregar». Las líneas que se escriban se agregarán después de las líneas existentes.
- La línea 18 escribe dos nuevas líneas, teniendo en cuenta que la constante vbCRLF es el marcador de fin de línea de los archivos de texto.
- La línea 20 vuelve a cerrar el archivo
- La línea 23 lo vuelve a abrir en modo «lectura»: vamos a leer el contenido del archivo.
- La línea 27 lee una línea de texto con el método ReadLine del objeto TextStream. Cuando el archivo acaba de «abrirse», el cursor se encuentra en la primera línea de texto del mismo. Una vez que esta línea ha sido leída mediante el método ReadLine, el cursor se posiciona en la segunda línea. De este modo, el método Readline no solo lee la línea actual, sino que luego «avanza» automáticamente a la siguiente línea.
- Para procesar todas las líneas de texto, el método ReadLine debe aplicarse repetidamente en un bucle. Este bucle (línea 26) termina cuando el atributo AtEndOfStream del objeto TextStream tiene el valor true. Esto significa que ya no hay más líneas que leer en el archivo.
6.2. Casos de error
Existen dos casos de error frecuentes:
- apertura en lectura de un archivo que no existe
- Abrir en modo de escritura o agregar un archivo que no existe con el tercer parámetro establecido en «false» en la llamada al método OpenTextFile.
El siguiente programa muestra cómo detectar estos errores:
6.3. La aplicación IMPOTS con un archivo de texto
Retomamos la aplicación de cálculo del impuesto suponiendo que los datos necesarios para el cálculo del impuesto se encuentran en un archivo de texto llamado data.txt:
12620 13190 15640 24740 31810 39970 48360 55790 92970 127860 151250 172040 195000 0
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 0,55 0,6 0,65
0 631 1290,5 2072,5 3309,5 4900 6898,5 9316,5 12106 16754,5 23147,5 30710 39312 49062
Las tres líneas contienen, respectivamente, los datos de las tablas de límites coeffR y coeffN de la aplicación. Gracias a la modularización de nuestra aplicación, las modificaciones se realizan principalmente en el procedimiento getData, encargado de construir las tres tablas. El nuevo programa es el siguiente:
Programa |
|
Comentarios:
- En el archivo de texto data.txt, los valores pueden estar separados por uno o más espacios, por lo que no es posible utilizar la función split para extraer los valores de la línea. Fue necesario recurrir a una expresión regular
- la función getData devuelve, además de las tres tablas de límites (coeffR, coeffN), un resultado que indica si hubo un error o no. Este resultado es una variante de tabla de dos elementos. El primer elemento es un código de error (0 si no hay error); el segundo, el mensaje de error si se ha producido un error.
- La función getData no verifica la validez de los valores encontrados en el archivo data.txt. En una situación real, debería hacerlo.
