Tipos alfanuméricos, conversión y concatenación.
Los datos de uso más común para los SEO son los datos alfanuméricos (1). Esto se debe a las propias funciones del SEO, que suponen un trabajo frecuente con documentos. Las variables alfanuméricas son las que apuntan a los espacios de memoria RAM que contienen este tipo de datos.
Las variables alfanuméricas son, por tanto, tan necesarias en los script que creemos los SEO, que sin ellas difícilmente podríamos hacer algo más que usar macros.
Un ejemplo podría ser este en el que un documento automatizado mediante una macro se convoca a la familia a reunirse con la tutora o el tutor. Veamos en qué consiste:
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "Por la presente se le convoca a reunión con la tutora de su hijo. Dicha reunión tendrá lugar el jueves, día 24 de enero de 2023 en el aula P2B"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
En el segundo parámetro de la estructura args1().Value está contenida una cadena de texto que es la forma concreta en que se expresar determinado contenido. Dado que podría expresarse otro contenido, el escrito se puede considerar en sí mismo (párrafo) como variable que podemos denominar sContenidoTexto.
De hecho, en su interior podemos identificar, a su vez, otros datos que también tienen categoría de variables, ya que cambian si las circunstancias son otras:
- Si se trata de un tutor, en lugar de una tutora
- Si se trata de una hija, en vez de un hijo
- Si el día de la semana es cualquier otro que no sea jueves
- Si la fecha no es 24, ni es enero, ni estamos en 2023
- Y finalmente si el aula no es P2B
Todo esto, que en el ejemplo resolvemos directamente mediante la escritura del párrafo, nos llama a modificar la macro implementando código OOo Basic desde el IDE consistente en la declaración de una variable alfanumérica y asignarla contenido. En consecuencia, para crear este script (ya no se puede llamar macro, puesto que no es posible incluir variables propias usando Grabar macro) tenemos que declarar una variable alfanumérica y darle contenido antes de la estructura args1() con el siguiente resultado:
Dim sContenidoTexto As String
sContenidoTexto = "Por la presente se le convoca a reunión con la tutora de su hijo. Dicha reunión tendrá lugar el jueves, día 24 de enero de 2023 en el aula P2B"
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = sContenidoTexto
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
- Primero declaramos la variable sContenidoTexto
- Después asignamos contenido a dicha variable
- Y finalmente la utilizamos como argumento en args1(0).Value
De este modo hemos mejorado significativamente la funcionalidad de la macro original. Pero vamos a detenernos en cómo trabajamos con una variable alfanumérica:
- Al igual que con el resto de las variables (tipos de datos en realidad) la declaramos mediante la instrucción Dim (dim también es correcto)
- Después identificamos el tipo con el que trabaja (As String)
- Y finalmente utilizamos las comillas para encerrar el contenido en el momento en que asignamos éste a la variable.
Cierto es que OOo Basic es un lenguaje flexible que no requiere la declaración explícita de una variable: estos pasos previos sólo son obligatorios si así se establece a priori (antes de crear el script) mediante Option Explicit. En caso contrario OOo Basic también permite el cambio de tipología de forma dinámica, esto es: según los datos que se asignen en cada momento a la variable. Personalmente no encuentro ventajosa esta opcionalidad y flexibilidad, y prefiero mantener el tipo de datos, aun sin usar Option Explicit. En caso contrario creo que es fácil cometer errores en el procesamiento (3).
Siguiendo con lo que nos interesa ahora (el uso de variables alfanuméricas), y teniendo en cuenta lo anterior, es posible identificar posibles variables dentro de la cadena de texto asignada a sContenidoTexto:
- Dos para tutoría, una para la cadena de texto y otra para la "firma"
- Una para identificar el tratamiento del alumnado según género
- Una para el día de la semana
- Otra para la fecha
- Y finalmente otra para el aula
Esto conlleva la siguiente declaración de variables:
Dim sTutoria1 As String, sTutoria2 As String, sAlumnado As String, sDiaSemana As String, sFecha As String, Aula As String
... pero lo que es más importante, permite una asignación de valores mucho más eficiente y, sobre todo, permite (posteriormente) utilizar fórmulas de asignación de contenidos mucho más interactiva, como veremos:
sTutoria1 = "Tutora"
Tutoria2 = "la tutora"
sAlumnado = "hijo"
sDiaSemana = "jueves"
sFecha = "24 de enero de 2023"
sAula = "P2B"
Es interesante observar cómo construimos ahora la cadena asociada a la variable sContenidoTexto
sContenidoTexto = "Por la presente se le convoca a reunión con " & Tutoria2 & " de su " & Alumnado & ". Dicha reunión tendrá lugar el " & DiaSemana & ", día " & Fecha & " en el aula " & Aula
... ya que permite observar el procedimiento de concatenación de cadenas de texto y variables alfanuméricas mediante el signo &. (4)
Para finalizar esta entrada, cuando tenemos una variable numérica que en ocasiones vamos a emplear como tal, pero que en otras va a ser tratada como "texto", en este segundo caso, por ejemplo, podemos realizar la concatenación de dicha variable como si se tratara de una variable alfanumérica sin que se produzca error (dada la "flexibilidad" de OOo Basic), pero es más ajustado a procedimiento (más riguroso) proceder a la previa conversión de la variable numérica a alfanumérica mediante la función CStr().
Veamos un ejemplo:
(1) Dim Anno As Integer, Edad As Integer
(2) Dim Fecha As String
(3) Anno = 2024
(4) Edad = 2024 - Anno
(5) Print Edad
(6) Fecha = "24 de " & "enero de " & CStr(Anno)
(7) Fecha = "24 de " & "enero de " & Anno
(8) Print Fecha
- (5) Da como resultado 3, ya que Anno es un número que se resta de otro en Edad.
- (6) y (7) dan el mismo resultado, pero (6) utiliza correctamente la función de conversión a valor alfanumérico (Cstr()), por lo que es preferible.
NOTAS
(1) También llamados alfabéticos o de cadenas de texto (string).
(2) Vimos en una entrada anterior que también lo puede ser un dato (palabra) concreto, mientras que el resto se mantiene invariable. Sería el caso del tratamiento gramatical de género (hijo vs. hija), o los datos de fecha y lugar.
(3) Como dije, personalmente considero que es mejor trabajar con las opciones más restrictivas por ser las que ofrecer mayor claridad, lo que evita errores a la larga. Esto es especialmente importante en script extensos y complejos. Por ello, aunque no es prescriptivo, recomiendo usar Opction Explicit para favorecer la detección de esos errores.
(4) También se puede utilizar el signo + con efecto equivalente de concatenación, pero es preferible & para evitar confusiones con el operador de suma.
No hay comentarios:
Publicar un comentario
Comenta esta entrada