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 (CrearMatrizBase) para 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 ObjectoHoja = ThisComponent.getCurrentController.getActiveSheet()'... a la celda A1 que contiene el textoDim oTexto As ObjectoTexto = oHoja.getCellRangeByName( "A1" )'... y al contenidos de A1Dim sTexto As StringsTexto = oTexto.getString()'Dividimos el texto en segmentos mediante la función Split()Dim sSepara As StringDim mSegmentos() As StringDim i As IntegersSepara = "#"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 MatrizBaseDim oHojas As ObjectoHojas = ThisComponent.getSheets()oHojas.insertNewByName("MatrizBase", 2)'... nos posicionamos en ella ....Dim oHojaMatrizBase As ObjectoHojaMatrizBase = 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))NextEnd 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()))
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