20 - Escritura y lectura de un archivo de texto


Veremos ahora una actividad fundamental para el empleo de páginas dinámicas que es la registración de datos en el servidor empleando un archivo de texto.

Debe quedar bien en claro que el archivo de texto se encuentra en el servidor web y no en la máquina donde se encuentra el navegador.

Desarrollaremos un problema que requiera la creación, carga y lectura de una archivo de texto:
Confeccionar un programa que permita cargar comentarios en un sitio web y almacenarlos en un archivo de texto. Implementar dos hipervínculos, uno que permita cargar datos en el archivo de texto y otra página que permita realizar la lectura del archivo de texto.

La primer página tiene por objetivo mostrar los dos hipervínculos:

pagina1.html

<html>
<head>
<title>problema</title>
</head>
<body>
<a href="pagina2.html">Cargar comentarios</a><br>
<a href="pagina3.asp">Leer comentarios</a>
</body>
</html> 

Ahora presentaremos los dos archivos necesarios para efectuar la carga y registración de datos en el servidor:

pagina2.html

<html>
<head>
<title>problema</title>
</head>
<body>
<form action="pagina2.asp" method="post">
Ingrese su nombre:
<input type="text" name="nombre"><br>
Comentarios<br>
<textarea name="comentarios" rows="10" cols="40"></textarea><br>
<input type="submit" value="enviar"><br>
</form>
</body>
</html>

Ahora el archivo que presenta los conceptos nuevos es:

pagina2.asp

<%option explicit%>
<html>
<head>
<title>problema</title>
</head>
<body>
<%
dim nombre,comentarios,archivo,ref
nombre=request.form("nombre")
comentarios=request.form("comentarios")
set archivo = CreateObject("Scripting.FileSystemObject")
set ref = archivo.OpenTextFile(server.mappath("comentarios.txt"), 8, 
True)
ref.writeline("_____Comentario___________________________________________________")
ref.writeline(now())
ref.writeline("")
ref.writeline("Nombre: " & nombre)
ref.writeline("")
ref.writeline("Comentarios: " & comentarios)
ref.close()
%>
<h2>Los comentarios fueron registrados</h2>
<a href="pagina1.html">Retornar</p>
</body>
</html>

Primero definimos cuatro variables e inicializamos dos de estas con los contenidos de los controles del formulario (text y textarea):

dim nombre,comentarios,archivo,ref
nombre=request.form("nombre")
comentarios=request.form("comentarios")

Creamos ahora un objeto de la clase FileSystemObject que nos permite acceder al sistema de archivos del servidor:

set archivo = CreateObject("Scripting.FileSystemObject")

Abrimos un archivo de texto para agregar datos:

set ref = archivo.OpenTextFile(server.mappath("comentarios.txt"), 8, True)

El primer parámetro indica el nombre del archivo que se abrirá para agregar, si no existe se crea ya que esto lo indica el tercer parámetro (True). El método mappath del objeto server retorna el path donde se encuentra nuestra página ASP, que sera el mismo directorio donde se guardará el archivo de texto. Debemos utilizar siempre server.mappath ya que no sabemos la unidad y directorio donde se almacena nuestro sitio en el hosting contratado.

El segundo parámetro indica cual es la forma de abrir el archivo (1-lectura 2-crea el archivo y lo abre para añadir (se borra si ya existe), 8-para añadir) en nuestro caso es 8 ya que grabaremos información en el archivo.

Por último el tercer parámetro si le pasamos el valor true crea el archivo si no existe.

Para grabar datos en el archivo de texto el objeto devuelto por el método opentextfile dispone de writeline. Este método graba una cadena en el archivo de texto y añade un salto de línea

ref.writeline("_____Comentario___________________________________________________")
ref.writeline(now())
ref.writeline("")
ref.writeline("Nombre: " & nombre)
ref.writeline("")
ref.writeline("Comentarios: " & comentarios)

Cuando finalizamos la grabación de datos en el archivo de texto procedemos a cerrar el archivo con el objetivo de permitir que otro proceso del servidor leer o modificar el archivo:

ref.close()

Ahora procederemos a la lectura del archivo de texto:

pagina3.asp

<%option explicit%>
<html>
<head>
<title>problema</title>
</head>
<body>
<%
dim linea,archivo,ref
set archivo = CreateObject("Scripting.FileSystemObject")
set ref = archivo.OpenTextFile(server.mappath("comentarios.txt"), 1, True)
do while not ref.atendofstream 
  linea=ref.readline()
  response.write(linea & "<br>")
Loop
ref.close()
%>
<br>
<a href="pagina1.html">Retornar</p>
</body>
</html>

Creamos ahora un objeto de la clase FileSystemObject que nos permite acceder al sistema de archivos del servidor como vimos en la página anterior:

set archivo = CreateObject("Scripting.FileSystemObject")

Abrimos un archivo de texto para leer:

set ref = archivo.OpenTextFile(server.mappath("comentarios.txt"), 1, True)

Ahora indicamos en el segundo parámetro el valor 1 ya que de esta forma se abre el archivo para lectura. Como pasamos True en el tercer parámetro si el archivo no existe se crea en forma automática.

Para proceder a la lectura de cada línea del archivo de texto:

do while not ref.atendofstream 
  linea=ref.readline()
  response.write(linea & "<br>")
Loop

El método atendofstream retorna true si llegó al fin de archivo, por eso mediante el operador lógico not invertimos el valor devuelto por esta función. Normalmente atendofstream retorna false ya que no se ha llegado al fin de archivo.

Este while se repite mientras no se llegue al fin de archivo. En cada vuelta leemos una línea del archivo de texto con el método readline, procediendo a imprimirla en la página. Agregamos un br al final de cada línea.

Cuando finalizamos la lectura de datos del archivo de texto procedemos a cerrarlo:

ref.close()


Retornar