Explicación y referencia sobre cómo se puede leer y escribir un fichero en ASP.
En algunas ocasiones es necesario que nuestras aplicaciones realicen acciones de lectura o escritura de ficheros de texto en el servidor.
Por poner un ejemplo, podríamos guardar todos los documentos de los reportajes de nuestro sitio en archivos de texto y desde nuestras páginas ASP podríamos abrir esos archivos de texto y mostrarlos dentro del diseño de nuestro sitio. Esto es una técnica habitual, que utilizamos también en desarrolloweb. Cualquiera que haya programado un poquito conocerá la importancia que tiene el manejo de archivos de texto en programas, de modo que no serán necesarios más ejemplos de usos posibles.
Como estamos en ASP, tenemos que tener en cuenta que los archivos que podemos manipular se encuentran en el servidor, ya que ASP puede tener acceso a los recursos del servidor y no a los del cliente.
Para leer o escribir archivos de texto en el servidor utilizando ASP se ha de crear un objeto File System Object (FSO), que sirve para tener acceso al sistema de archivos del servidor donde están nuestras páginas. Por ahora no hemos hablado mucho del FSO en desarrolloweb.com, pero tenemos pensado hacer una serie de reportajes para tratarlo a fondo. De momento será suficiente que sepamos que para leer o escribir un fichero debemos apoyarnos en el FSO necesariamente. Para crear una conexión con el FSO en nuestras páginas ASP hacemos lo siguiente.
set con_FSO = createObject("scripting.filesystemobject")
En este momento ya tenemos acceso al sistema de archivos a través del File System Object, nuestra variable con_FSO guarda el objeto que realiza la conexión con el sistema de archivos. Ahora debemos crear el objeto TextStream, que será el objeto final que necesitaremos tener para leer o escribir el fichero.
Existen en ASP tres métodos para crear el TexStream que se utilizan en casos distintos, según las acciones que pretendamos realizar con el fichero. Los tres métodos devuelven un objeto TextStream.
CreateTextFile (archivo,sobreescribe,unicode)
Este método creará un fichero en nuestro sistema de archivos y devolverá un objeto TextStream, que es el que utilizaremos para movernos por el fichero, leer o escribir. El parámetro archivo es para indicar la ruta del sistema de archivos del servidor donde se creará el fichero. Los otros dos parámetros son opcionales. Cuando está a true sobrescribe, indica que si había un archivo con ese nombre se sobrescribe. Cuando unicode está a true se indica que el archivo se debe crear con juego de caracteres unicode.
OpenTextFile (archivo,tipo_acceso,crear,formato)
Con este método abrimos un archivo de texto para leer o escribir y nos devuelve el objeto TextStream necesario para realizar las acciones sobre el fichero. El parámetro archivo indica la ruta del fichero a crear. El parámetro tipo_acceso es opcional, indica el tipo de acceso que vamos a realizar, por defecto se abre para lectura, ForReading (1), también podemos abrirlo para escritura ForWriting (2) y para añadir ForAppending (8). Con el parámetro crear, también opcional, se indica si se debe crear el fichero en caso de que no exista, por defecto no se crea. Por último, formato nos sirve para indicar el formato del fichero, ASCII es el predeterminado.
OpenAsTextStream (tipo_acceso,formato)
Es el tercer método para obtener un TextStream, la diferencia es que se aplica a el objeto File (fichero) que no hemos visto, en lugar del objeto FileSystemObject.
Si queremos crear un objeto TextStream a partir de un FSO necesitamos utilizar uno de los dos primeros métodos, siendo el tercero útil para crear un TexStream a partir de un objeto File.
El objeto TextStream
Como hemos señalado, es el que se utilizamos para movernos por el fichero y realizar las acciones sobre el texto, enfocadas a la lectura o escritura. Tiene las siguientes propiedades.
AtEndOfLine vale true si nos encontramos al final de la línea en el fichero.
AtEndOfStream vale true si estamos al final del fichero.
Colum guarda el valor de la columna del carácter actual en el que estamos situados dentro del fichero.
Line guarda el valor de la línea actual.
Los métodos del objeto son los siguientes.
Close() cierra el fichero. Necesario una vez acabado el trabajo.
Read(numero) devuelve un numero de caracteres del fichero.
ReadAll() lee todo el fichero y lo devuelve.
ReadLine() lee una línea entera.
Skip(numero) pasa un numero de caracteres dado.
SkipLine() salta una línea.
Write(texto) escribe un texto dado dentro del fichero
WriteLine(texto) escribe un texto y coloca al fina un salto de línea.
WriteBlankLines(numero) coloca un numero dado de saltos de línea.
Estas notas servirán seguro como buena referencia para realizar cualquier tipo de acción sobre ficheros, pero antes de acabar vamos a ver un ejemplo completo de trabajo con ficheros. Vamos a hacer un pequeño script que crea un fichero y escribe los números del 0 al 9. Luego cerraremos el fichero y lo volveremos a abrir para lectura para sacar su contenido en la página web.
<%
'creamos el nombre del archivo
archivo= request.serverVariables("APPL_PHYSICAL_PATH") & "pruebas.txt"
'conectamos con el FSO
set confile = createObject("scripting.filesystemobject")
'creamos el objeto TextStream
set fich = confile.CreateTextFile(archivo)
'escribimos los números del 0 al 9
for i=0 to 9
fich.write(i)
next
'cerramos el fichero
fich.close()
'volvemos a abrir el fichero para lectura
set fich = confile.OpenTextFile(archivo)
'leemos el contenido del fichero
texto_fichero = fich.readAll()
'imprimimos en la página el contenido del fichero
response.write(texto_fichero)
'cerramos el fichero
fich.close()
%>
En la primera línea del código creamos el nombre del archivo. El nombre del archivo es una variable cadena que contiene la ruta absoluta del archivo en el sistema del servidor. Como probablemente ocurra en vuestro alojamiento ASP, vosotros no sabéis en qué directorio y disco del servidor están alojadas vuestras páginas (a no ser que seáis vosotros los administradores o estéis trabajando en local). Si es así, necesitaréis algún mecanismo para obtener la ruta donde están vuestros archivos y donde tenéis permisos de lectura y escritura. Con el método
request.serverVariables("APPL_PHYSICAL_PATH") obtenemos la ruta física donde están nuestras páginas. A este camino le concatenamos el nombre del archivo que deseamos crear y ya tenemos el la ruta completa del archivo.
El resto de líneas se pueden entender bien con los comentarios y las notas de arriba en este artículo.
Es importante señalar que para leer y escribir en vuestros directorios necesitaréis los correspondientes permisos de lectura y escritura. Si estáis haciendo pruebas en un sistema Windows95 no necesitaréis permisos, ya que ese sistema no los implementa. En servidores un poco más serios como los que tendrá vuestro proveedor de alojamiento necesitaréis que os otorguen permisos a los directorios donde vayáis a escribir ficheros. Los permisos de lectura suelen estar otorgados desde el principio.
Eso es todo por ahora, esperemos que este artículo sea bien útil para resolver vuestras dudas con el tratamiento de ficheros de texto en ASP.
Por poner un ejemplo, podríamos guardar todos los documentos de los reportajes de nuestro sitio en archivos de texto y desde nuestras páginas ASP podríamos abrir esos archivos de texto y mostrarlos dentro del diseño de nuestro sitio. Esto es una técnica habitual, que utilizamos también en desarrolloweb. Cualquiera que haya programado un poquito conocerá la importancia que tiene el manejo de archivos de texto en programas, de modo que no serán necesarios más ejemplos de usos posibles.
Como estamos en ASP, tenemos que tener en cuenta que los archivos que podemos manipular se encuentran en el servidor, ya que ASP puede tener acceso a los recursos del servidor y no a los del cliente.
Para leer o escribir archivos de texto en el servidor utilizando ASP se ha de crear un objeto File System Object (FSO), que sirve para tener acceso al sistema de archivos del servidor donde están nuestras páginas. Por ahora no hemos hablado mucho del FSO en desarrolloweb.com, pero tenemos pensado hacer una serie de reportajes para tratarlo a fondo. De momento será suficiente que sepamos que para leer o escribir un fichero debemos apoyarnos en el FSO necesariamente. Para crear una conexión con el FSO en nuestras páginas ASP hacemos lo siguiente.
set con_FSO = createObject("scripting.filesystemobject")
En este momento ya tenemos acceso al sistema de archivos a través del File System Object, nuestra variable con_FSO guarda el objeto que realiza la conexión con el sistema de archivos. Ahora debemos crear el objeto TextStream, que será el objeto final que necesitaremos tener para leer o escribir el fichero.
Existen en ASP tres métodos para crear el TexStream que se utilizan en casos distintos, según las acciones que pretendamos realizar con el fichero. Los tres métodos devuelven un objeto TextStream.
CreateTextFile (archivo,sobreescribe,unicode)
Este método creará un fichero en nuestro sistema de archivos y devolverá un objeto TextStream, que es el que utilizaremos para movernos por el fichero, leer o escribir. El parámetro archivo es para indicar la ruta del sistema de archivos del servidor donde se creará el fichero. Los otros dos parámetros son opcionales. Cuando está a true sobrescribe, indica que si había un archivo con ese nombre se sobrescribe. Cuando unicode está a true se indica que el archivo se debe crear con juego de caracteres unicode.
OpenTextFile (archivo,tipo_acceso,crear,formato)
Con este método abrimos un archivo de texto para leer o escribir y nos devuelve el objeto TextStream necesario para realizar las acciones sobre el fichero. El parámetro archivo indica la ruta del fichero a crear. El parámetro tipo_acceso es opcional, indica el tipo de acceso que vamos a realizar, por defecto se abre para lectura, ForReading (1), también podemos abrirlo para escritura ForWriting (2) y para añadir ForAppending (8). Con el parámetro crear, también opcional, se indica si se debe crear el fichero en caso de que no exista, por defecto no se crea. Por último, formato nos sirve para indicar el formato del fichero, ASCII es el predeterminado.
OpenAsTextStream (tipo_acceso,formato)
Es el tercer método para obtener un TextStream, la diferencia es que se aplica a el objeto File (fichero) que no hemos visto, en lugar del objeto FileSystemObject.
Si queremos crear un objeto TextStream a partir de un FSO necesitamos utilizar uno de los dos primeros métodos, siendo el tercero útil para crear un TexStream a partir de un objeto File.
El objeto TextStream
Como hemos señalado, es el que se utilizamos para movernos por el fichero y realizar las acciones sobre el texto, enfocadas a la lectura o escritura. Tiene las siguientes propiedades.
AtEndOfLine vale true si nos encontramos al final de la línea en el fichero.
AtEndOfStream vale true si estamos al final del fichero.
Colum guarda el valor de la columna del carácter actual en el que estamos situados dentro del fichero.
Line guarda el valor de la línea actual.
Los métodos del objeto son los siguientes.
Close() cierra el fichero. Necesario una vez acabado el trabajo.
Read(numero) devuelve un numero de caracteres del fichero.
ReadAll() lee todo el fichero y lo devuelve.
ReadLine() lee una línea entera.
Skip(numero) pasa un numero de caracteres dado.
SkipLine() salta una línea.
Write(texto) escribe un texto dado dentro del fichero
WriteLine(texto) escribe un texto y coloca al fina un salto de línea.
WriteBlankLines(numero) coloca un numero dado de saltos de línea.
Estas notas servirán seguro como buena referencia para realizar cualquier tipo de acción sobre ficheros, pero antes de acabar vamos a ver un ejemplo completo de trabajo con ficheros. Vamos a hacer un pequeño script que crea un fichero y escribe los números del 0 al 9. Luego cerraremos el fichero y lo volveremos a abrir para lectura para sacar su contenido en la página web.
<%
'creamos el nombre del archivo
archivo= request.serverVariables("APPL_PHYSICAL_PATH") & "pruebas.txt"
'conectamos con el FSO
set confile = createObject("scripting.filesystemobject")
'creamos el objeto TextStream
set fich = confile.CreateTextFile(archivo)
'escribimos los números del 0 al 9
for i=0 to 9
fich.write(i)
next
'cerramos el fichero
fich.close()
'volvemos a abrir el fichero para lectura
set fich = confile.OpenTextFile(archivo)
'leemos el contenido del fichero
texto_fichero = fich.readAll()
'imprimimos en la página el contenido del fichero
response.write(texto_fichero)
'cerramos el fichero
fich.close()
%>
En la primera línea del código creamos el nombre del archivo. El nombre del archivo es una variable cadena que contiene la ruta absoluta del archivo en el sistema del servidor. Como probablemente ocurra en vuestro alojamiento ASP, vosotros no sabéis en qué directorio y disco del servidor están alojadas vuestras páginas (a no ser que seáis vosotros los administradores o estéis trabajando en local). Si es así, necesitaréis algún mecanismo para obtener la ruta donde están vuestros archivos y donde tenéis permisos de lectura y escritura. Con el método
request.serverVariables("APPL_PHYSICAL_PATH") obtenemos la ruta física donde están nuestras páginas. A este camino le concatenamos el nombre del archivo que deseamos crear y ya tenemos el la ruta completa del archivo.
El resto de líneas se pueden entender bien con los comentarios y las notas de arriba en este artículo.
Es importante señalar que para leer y escribir en vuestros directorios necesitaréis los correspondientes permisos de lectura y escritura. Si estáis haciendo pruebas en un sistema Windows95 no necesitaréis permisos, ya que ese sistema no los implementa. En servidores un poco más serios como los que tendrá vuestro proveedor de alojamiento necesitaréis que os otorguen permisos a los directorios donde vayáis a escribir ficheros. Los permisos de lectura suelen estar otorgados desde el principio.
Eso es todo por ahora, esperemos que este artículo sea bien útil para resolver vuestras dudas con el tratamiento de ficheros de texto en ASP.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...