¡Hola, chicos del scripting!

Bienvenido a la columna TechNet en la cual, por medio de Microsoft Scripting Guy, se abordan las preguntas frecuentes acerca de las secuencias de comandos para la administración de sistemas. ¿Tiene alguna pregunta sobre las secuencias de comandos para la administración de sistemas? Envíe un correo electrónico a scripter@microsoft.com. No podemos garantizarle que seremos capaces de responder todas las preguntas que nos lleguen, pero haremos todo lo posible.

Y no se olvide de consultar el Archivo de ¡Hola, chicos del scripting!.

Pregunta del día: ¿cómo puedo cambiar el formato de los números mediante una secuencia de comandos?


¿Cómo puedo cambiar el formato de los números mediante una secuencia de comandos?

P

¡Hola, chicos del scripting! Tengo un archivo de texto que contiene latitudes y longitudes. Los números aparecen con este formato: 36000000. Necesito cambiar su formato de forma que queden así: 36.000000. ¿Cómo puedo cambiar el formato de los números mediante una secuencia de comandos?

-- BE

R

Hola BE. Si tiene una pregunta sobre números, ha venido al lugar adecuado: uno de los chicos del scripting es el orgulloso propietario de un título en matemáticas avanzadas. Y el resto de los chicos del scripting... bueno, olvidémonos de los otros chicos del scripting. ¿Hemos mencionado que uno de los chicos del scripting es el orgulloso propietario de un título en matemáticas avanzadas?

Por suerte no necesita un título en matemáticas avanzadas para poder solucionar este problema. (Y por suerte nosotros tampoco lo necesitamos, pues de lo contrario la columna de hoy sería muy corta.) Como ha indicado, BE, tiene un par de archivos de texto que contienen entradas de latitudes y longitudes similares a esto:

36000000
-076000000
92000000
105000000

Lo que desea es abrir el archivo de texto, cambiar el formato de los números y, a continuación, guardar el archivo con el nuevo formato. Una vez haya terminado, el archivo de texto debería tener un aspecto similar al siguiente:

36.000000
-76.000000
92.000000
105.000000

¿Podemos llevar a cabo esta operación mediante una secuencia de comandos? Eso es pan comido:

Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("c:\scripts\test.txt", ForReading)
Do Until objFile.AtEndOfStream
    intLine = objFile.Readline
    intLine = intLine/ 1000000
    intLine = FormatNumber(intLine, 6)
    strText = strText & intLine & vbCrLf
Loop
objFile.Close
Set objFile = objFSO.OpenTextFile("c:\scripts\test.txt", ForWriting)
objFile.Write strText
objFile.Close

Y no se preocupe: le explicaremos de qué manera funciona. Después de todo, para eso estamos aquí, ¿no?

Como puede observar, la secuencia de comandos comienza de forma bastante simple. Primero definimos dos constantes (ForReading y ForWriting), que utilizaremos al trabajar con el archivo de texto. Creamos una instancia de FileSystemObject y luego utilizamos el método OpenTextFile para abrir y leer el archivo C:\Scripts\Test.txt. (Como bien sabrá, un archivo de texto se puede abrir para lectura o para escritura, pero no se pueden realizar ambas operaciones al mismo tiempo.)

Eso nos lleva a este bloque de código:

Do Until objFile.AtEndOfStream
    intLine = objFile.Readline
    intLine = intLine/ 1000000
    intLine = FormatNumber(intLine, 6)
    strText = strText & intLine & vbCrLf
Loop

Esta es la parte más emocionante. Para comenzar, configuramos un bucle Do Until, que leerá el archivo línea por línea; a continuación, seguimos leyendo hasta la última línea del archivo (es decir, hasta que la propiedad AtEndOfStream tenga el valor True). Dentro de ese bucle utilizamos el método ReadLine para leer la primera línea del archivo y almacenar ese valor (en nuestro archivo de ejemplo, 36000000) en una variable denominada intLine.

El paso siguiente es sencillo. Queremos convertir el número 36000000 en 36.000000. ¿Cómo lo hacemos? Para comenzar, dividimos el valor entre 1000000:

intLine = intLine/ 1000000

De ese modo obtendremos (en este caso) el valor 36. Para mostrar ese valor con seis posiciones decimales basta con llamar a la función FormatNumber:

intLine = FormatNumber(intLine, 6)

Lo que hacemos aquí es asignar un valor nuevo a la variable intLine. ¿Cuál será ese nuevo valor? Será el resultado de ejecutar el valor existente de intLine (36) en la función FormatNumber, solicitando a FormatNumber que muestre el resultado con seis decimales. (Para eso se utiliza el parámetro 6, que indica el número de decimales que deseamos que se muestren.) El resultado final es el siguiente: tras convertir 36000000 en 36, ahora hemos convertido 36 en 36.000000. Exactamente lo que nos propusimos hacer desde el principio.

Tras convertir la primera línea (primer número) del archivo de texto, agregamos el valor nuevo más un retorno de carro o salto de línea (vbCrLf) a una variable llamada strText:

strText = strText & intLine & vbCrLf

Como se habrá imaginado, strText es simplemente una variable que realiza un seguimiento de los números a los que se ha cambiado el formato. Una vez leídas todas las líneas del archivo de texto, el valor de strText será similar a lo siguiente:

36.000000
-76.000000
92.000000
105.000000

Si está pensando: “Vaya, eso se parece mucho al formato que queremos dar a los números del archivo de texto”, cuélguese una medalla de oro: este es exactamente el formato que queremos dar a los números del archivo de texto.

Ahora, para poder conseguir nuestro objetivo final, simplemente tenemos que guardar el valor de strText en el archivo de texto. Para ello, primero cerramos el archivo C:\Scripts\Test.txt. ¿Por qué? Recuerde que abrimos el archivo para lectura; para poder escribir en él, debemos cerrarlo y volverlo a abrir para escritura. Eso es lo que hacemos aquí:

objFile.Close
Set objFile = objFSO.OpenTextFile("c:\scripts\test.txt", ForWriting)

Utilizamos el método Write para escribir el valor de strText en el archivo de texto y, a continuación, cerramos el archivo de nuevo. El resultado final: el archivo de texto ahora es similar a este:

36.000000
-76.000000
92.000000
105.000000

No está mal del todo para un grupo de chicos del scripting con limitados conocimientos de matemáticas, ¿verdad?

Nota. A pesar de tener tan bajo concepto de nosotros mismos, deberíamos señalar que uno de los chicos del scripting preparó toda su declaración fiscal ¡sin utilizar la calculadora! De acuerdo, realmente no se necesita la calculadora cuando se trabaja con unas cifras tan bajas como las de su salario pero, a pesar de ello, nos pareció asombroso. (Nota del editor: antes de que Hacienda nos investigue a todos, les ahorraremos el trabajo y diremos que fue Greg.)



Para más Información

Consulte el Archivo de ¡Hola, chicos del scripting!.

Arriba Arriba