Stage 6 Management commitment Stage
7.1 Comparison results
Este es el último de los objetos pertenecientes al motor de secuencias de comandos de VBScritp. Mediante el objeto TextStream se podrá leer y modificar la información de ficheros de texto almacenados en el servidor.
Para obtener un objeto TextStream que nos permita nos permita manipular el contenido de un fichero de texto, tenemos varias opciones:
• A partir de los métodos CreateTextFile() y OpenTextFile() del objeto FileSystemObject. • A partir del método CreateTextFile() del objeto Folder.
• A partir de los métodos CreateTextFile() y OpenAsTextStream() del objeto File.
El método CreateTextFile permite crear un fichero de texto en el servidor Web, y tiene la siguiente sintaxis, que es igual en todos los objetos:
objeto.CreateTextFile(nombrefichero[, sobrescribir[, unicode]]) Donde objeto puede se una instancia de un objeto FileSystemObject, Folder o File, nombrefichero es el nombre del fichero que se desea crear, sobreescribir tendrá los valores True o False según se desee o no sobreescribir un fichero existente y unicode también poseerá los valores True o False para indicar en que formato se creará el fichero: en unicode o ASCII.
Al crear un fichero de texto, si se quiere manipular, se deberá guardar el resultado devuelto por el método CreateTextFile() en un objeto TextStream. En el siguiente ejemplo se muestra como se crea un fichero vacío llamado vacio.txt, como se puede observar el fichero se crea a partir de un objeto
FileSystemObject y se guarda dentro de un objeto TextStream para permitir la manipulación del fichero de texto, en este caso simplemente se utiliza para cerrar el fichero. En el ejemplo no se indica el parámetro unicode, por lo tanto se tomará el valor por defecto que es False, es decir se creará un fichero ASCII.
<%Set objFSO = Server.CreateObject("Scripting.FileSystemObject") Set objTextStream=objFSO.CreateTextFile("c:\Tmp\vacio.txt",True) objTextStream.Close%>
Código fuente 166
El método OpenTextFile permite abrir un fichero de texto en el servidor para lectura o escritura. Su sintaxis es la siguiente:
objeto.OpenTextFile(nombrefichero[, modo[, crear[, formato]]]) Donde objeto es una instancia de un objeto FileSystemObject, nombrefichero es le nombre de fichero a abrir. El modo puede ser una de las siguientes constantes ForReading(1), es decir, de sólo lectura, ForWriting(2), para escritura eliminando todos los contenidos, y ForAppending(8), de escritura para añadir contenidos sin eliminar los existentes, por defecto el valor de este parámetro es ForReading. El fichero si no existe y el parámetro crear tiene el valor True se creará un nuevo fichero, por defecto el valor de este parámetro es False. Los formatos válidos son TristateFalse(0) para abrirlo como texto ASCII, TristateTrue(-1) para abrir el fichero como unicode y TristateUseDefault(-2) para abrir el fichero utilizando el formato por defecto del sistema. Por defecto el parámetro formato tiene el valor TristateFalse.
Se debe señalar que la opción de crear el fichero tendrá el valor True sólo cuando el fichero se haya abierto para escritura, si está abierto para lectura se producirá un error.
Al igual que cuando se creaba un fichero, en el caso de abrirlo también se requiere un objeto TextStream para manipularlo. En el Código fuente 167 se muestra como se abriría un fichero para lectura y como se mostraría su contenido en el navegador.
<%@ Language=VBScript %>
<!--METADATA TYPE="typelib" FILE="C:\Winnt\system32\scrrun.dll"--> <HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD>
<BODY>
<%Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTextStream=objFSO.OpenTextFile("c:\tmp\texto.txt",ForReading,False,False) While Not objTextStream.AtEndOfStream
Response.write(objTextStream.ReadLine&"<br>") Wend objTextStream.Close%> </BODY> </HTML> Código fuente 167
Como se puede observar el fichero TEXTO.TXT se abre para lectura. Mientras no se llegue al final del fichero se va leyendo cada fila con el método ReadLine del objeto TextStream, y mostrando su
contenido en el navegador mediante Response.Write. La propiedad que nos indica si hemos llegado al final del fichero es la propiedad AtEndOfStream del objeto TextStream. Por último se cierra el fichero con el método Close. De todas formas, un poco más adelante comentaremos todas las propiedades y métodos que nos ofrece el objeto TextStream.
No debemos olvidar realizar la referencia a la librería de tipos que contiene las constantes definidas para el acceso al sistema de ficheros, en nuestro caso hemos utilizado la constante ForReading.
En el Código fuente 168 se muestra también como se abriría un fichero para escritura, la función que realiza este código es el de copiar el contenido de un fichero en otro:
<%Set objFSO = Server.CreateObject("Scripting.FileSystemObject") Set objTextStream=objFSO.OpenTextFile("c:\tmp\texto.txt",ForReading) Set copia=objFSO.OpenTextFile("c:\tmp\copia.txt",ForWriting,True) While Not objTextStream.AtEndOfStream
copia.WriteLine(objTextStream.ReadLine) Wend
objTextStream.Close copia.Close%>
Código fuente 168
Si llamamos al método OpenTextFile indicándole que cree el fichero si no existe, en el caso de que no exista el efecto será el mismo si llamamos al método CreateTextFile.
Como se ha podido observar en los ejemplos anteriores, el objeto TextStream nos ofrece una serie de métodos y propiedades para tratar los ficheros de texto. Las propiedades que nos ofrece el objeto TextStream son las siguientes:
• AtEndOfStream: propiedad se sólo lectura que indica se ha llegado al final del fichero. Si el puntero de archivo se encuentra al final del fichero esta propiedad tendrá el valor True, y en caso contrario tendrá el valor False.
• AtEndOfLine: indica si se ha llegado al fin de línea dentro de un fichero. Esta propiedad de sólo lectura se puede utilizar cuando necesitemos leer una línea de un fichero carácter a carácter.
• Column: esta propiedad contiene el número de columna del caracter actual dentro del fichero empezando por 1.
• Line: número de línea actual del fichero empezando por 1. Y los métodos que proporciona el objeto TextStream son:
• Close(): cierra un fichero abierto.
• Read(numeroCaracteres): lee y devuelve en una cadena el número de caracteres que se le pasa como parámetro.
• ReadAll(): lee un fichero completo y devuelve su contenido en una cadena. En ficheros de gran tamaño, utilizar el método ReadAll() consume muchos recursos de memoria. Se deberían utilizar otras técnicas para utilizar un fichero abierto para lectura, como leerlo línea a línea.