Gestión de archivos y fechas
La gestión de archivos
La gestión de archivos es muy fácil con PowerShell, a diferencia de lo que sucede con VBScript, para quien haya tenido ocasión de practicar con este. En efecto, ya no es necesario instanciar objetos COM de tipo filesystem, abrirlos especificando un modo de acceso (lectura o escritura), para después cerrarlos. PowerShell dispone de un juego de comandos dedicados a la gestión de archivos y veremos que representan una ganancia enorme de productividad en la escritura de scripts.
Dicho esto, hay un aspecto en particular al que se debería prestar atención y del que habría que saber que se hace para evitar problemas. Se trata del formato de codificación de los archivos de texto. Son muchos y no conviene equivocarse; detallaremos este punto en este capítulo.
En el capítulo Descubrimiento de PowerShell, nos interesamos en el continente, es decir en el archivo en sí, y habíamos visto cómo crearlo, desplazarlo, renombrarlo, etc. Ahora nos interesamos en el contenido y veremos entre otras cosas cómo generarlo y cómo leerlo.
1. Formatos de codificación de los archivos de texto
Antes de entrar de lleno en materia, nos parece necesario dedicar algunos minutos a introducir este tema tan vasto e importante: la codificación de archivos de texto.
Sin entrar en los detalles de la prehistoria informática, comenzaremos hablando del estándar ASCII, conocido por todos. Este, aparecido con los primeros ordenadores a finales de los años 60 en Estados Unidos, codifica los caracteres en 7 bits (de la posición 0 a la 127), lo que da, un total de 128 caracteres que se agrupan en una tabla que se ha vuelto célebre, la famosa tabla ASCII. El problema que presenta esta norma para nosotros, castellanohablantes (y no solo para nosotros), es que no contiene nuestros caracteres acentuados… Lo cual es lógico, puesto que ASCII se inventó por un organismo americano para los americanos.
ASCII extendido (ANSI), una solución intermedia
Dado un problema, dada una solución; y en informática los procesadores trabajan sobre potencias de 2, de modo que no es posible escribir un carácter salvo en 8 bits (1 byte). Esto significa que existía un bit inutilizado en la codificación de caracteres en formato ASCII. Los informáticos de la época...
Fechas
Con PowerShell, la obtención de un objeto que representa la fecha y la hora actual se realiza mediante el comando Get-Date. Aunque un simple Get-Date en la consola devuelve la hora y la fecha actual, este fecha puede declinarse en numerosos formatos.
Una variable que contenga una fecha es de tipo DateTime. Para comprobarlo por usted mismo, teclee el siguiente comando:
PS > (Get-Date).GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True DateTime System.ValueType
Los objetos de tipo DateTime poseen numerosas propiedades y métodos interesantes como, entre otros, el método IsDaylightSavingTime, que indica si la hora actual está ajustada al horario de verano o de invierno.
Para darse cuenta de las posibilidades existentes en el tratamiento de las fechas, lo mejor es una vez más utilizar Get-Member sobre el objeto devuelto por Get-Date:
PS > Get-Date | Get-Member
Cuando hablamos de fecha o de tiempo, es necesario definir lo que llamamos unidad de tiempo. Y la unidad más elemental del sistema se llama «tick». Un tick es una medida de tiempo. Corresponde a un latido de corazón del ordenador, es decir a un periodo del Timer (el Timer es el componente electrónico que gestiona el tiempo). Este valor actualmente es del orden de diez millonésimas de segundo.
Por lo tanto aproximadamente 10 millones de media para el tratamiento del comando.
1. Manipulación de los objetos DateTime
El comando Get-Member aplicado a un objeto de tipo DateTime devuelve una lista considerable de métodos y propiedades. La siguiente tabla expone los métodos más utilizados y da una breve descripción.
Método |
Descripción |
Add AddDays AddHours AddMilliseconds AddMinutes AddMonths AddSeconds AddTicks AddYears |
Añade o sustrae una o varias unidades de tiempo del objeto fecha. Añade si el valor pasado como argumento es positivo, sustrae si el valor pasado es negativo. |
CompareTo |
Compara una fecha con otra. Los valores devueltos son: -1: si la fecha es anterior a la que la comparamos. 1: si es posterior. 0: si son iguales.... |