jueves, 17 de julio de 2025

Textos. Procedimientos

Creación de la matriz-base (I)


Esta segunda fase, que es también preparatoria, culmina [la que precede] y como ella, se resuelve en parte manualmente, en parte de forma automatizada; solo que en este caso se invierte el orden de los procesos.


En efecto, primero divido el texto en segmentos mediante OOo Basic por medio de la función Split(). A continuación corresponde identificar la tipología de cada segmento de texto, lo que requiere la intervención directa (y manual) del profesional, que deberá tener presente lo que se indica [en esta entrada].

Atendiendo a la especificidad de cada una de las parte de esta fase, opto por limitarme en esta entrada a describir la primera (1), dejando la segunda para otra. Así puedo dedicarle tiempo y espacio sin sobrecargar al actual, más simple pero no menos importante; tanto que he considerado conveniente crear un módulo específico (CrearMatrizBasepara albergar el código que la hace posible (MatrizBase), el cual expongo a continuación, aunque sólo parcialmente (2).

Sub MatrizBase

'Acceder a la hoja TextoBase...
Dim oHoja As Object
oHoja = ThisComponent.getCurrentController.getActiveSheet()
'... a la celda A1 que contiene el texto
Dim oTexto As Object
oTexto = oHoja.getCellRangeByName( "A1" )
'... y al contenidos de A1
Dim sTexto As String
sTexto = oTexto.getString()

'Dividimos el texto en segmentos mediante la función Split()

Dim sSepara As String
Dim mSegmentos() As String
Dim i As Integer 

sSepara = "#"
mSegmentos = Split ( sTexto(), sSepara)

'Eliminamos espacios mediante la función Trim()
For i = LBound(mSegmentos()) To UBound(mSegmentos())
mSegmentos(i) = Trim(mSegmentos(i))
Next

'Creamos la hoja MatrizBase
Dim oHojas As Object
oHojas = ThisComponent.getSheets()
oHojas.insertNewByName("MatrizBase", 2)

'... nos posicionamos en ella ....
Dim oHojaMatrizBase As Object
oHojaMatrizBase = ThisComponent.getSheets().getByName("MatrizBase")

'... y copiamos los segmentos (elementos de la matriz)
For i = LBound(mSegmentos()) To UBound (mSegmentos())
oTextoMatriz = oHojaMatrizBase.getCellRangeByName( "A" & i+1 )
oTextoMatriz.setString(mSegmentos(i))
Next

End Sub

Puedes ver que este script está claramente comentado, de modo que es fácil comprender su estructura y funcionamiento, en el que se aprecian dos partes: la captura del texto y su conversión en matriz de segmentos textuales y la grabación de ésta en una nueva hoja (MatrizBase).

Observarás que en el primer subproceso se diferencian a su vez tres partes:
  • En la primera accedemos sucesivamente a la hoja (oHoja = ThisComponent.getCurrentController.getActiveSheet()), a la celda (oTexto = oHoja.getCellRangeByName( "A1" )) y finalmente a su contenido (texto) (sTexto = oTexto.getString()) (3)
  • En la segunda aplicamos la [función Split()] para dividir el texto en los segmentos (mSegmentos = Split ( sTexto(), sSepara)), [previamente delimitados] mediante # (sSepara = "#") (4)
  • Y en la tercera eliminamos los espacios sobrantes en las subcadenas mediante la [función Trim()] (mSegmentos(i) = Trim(mSegmentos(i))) aplicada por medio de un bucle For (For i = LBound(mSegmentos()) To UBound(mSegmentos()))
El segundo subproceso implica crear una  nueva hoja, para lo que hacemos uso de [funciones ya estudiadas], que nos sirven para crear la hoja MatrizBase (oHojas.insertNewByName("MatrizBase", 2)) y para posicionarnos en ella (oHojaMatrizBase = ThisComponent.getSheets().getByName("MatrizBase")) como paso previo al traslado del contenido de la matriz-base a la columna A (oTextoMatriz.setString(mSegmentos(i))). Para usamos un bucle For (For i = LBound(mSegmentos()) To UBound (mSegmentos())).

En parte nos estamos adelantando ciertos acontecimientos, que en realidad conviene realizar tras la ejecución de lo que se explicará en la entrada que sigue, pero es conveniente mantener esta exposición para que se comprenda mejor el proceso a seguir. Tiempo habrá de aclarar lo que corresponda.


NOTAS

(1) Motivo del (I) que acompaña al título de la entrada.
(2) Hasta no tener completamente desarrollado el procedimiento no se puede dar por finalizado el script, por lo que no proporcionaré tampoco el soporte documental.
(3) Todo esto ya ya sido tratado en entrada anteriores, como [en esta], en la que se explica cómo acceder a una hoja, que va seguida de la explicación del [acceso a la celda] y a [su contenido].
(4) Aunque debería haber sido indicado [en esta entrada], debo señalar que también se ha delimitado el fin de párrafo y salto de línea mediante este símbolo, generando una entrada vacía en la matriz-base. Su tratamiento al final del proceso explicará los motivos de este proceder y la forma de alcanzar el objetivo que se pretende con ello. De momento prefiero guardar silencio.

No hay comentarios:

Publicar un comentario

Comenta esta entrada