sábado, 26 de julio de 2025

Textos. Procedimientos

Tratamiento de las v-input


Concluyo con esta entrada, en la práctica y en lo esencial, la fase primera del desarrollo de este modelo de automatización de textos, aunque quedan algunas cuestiones que en estos momentos implícitamente estoy considerando como accesorios, aunque posiblemente no lo sean tanto. Desde esta perspectiva más funcional que otra cosa, se debe "rematar la faena" hablando del tratamiento de las llamadas variables-input (vi).


Dado
que 
[algo sabemos ya de ellas] no me voy a detener aquí en lo ya explicado, y lo que resta por explicar tendrá que esperar al momento oportuno, así que me limitaré a exponer el modo en que genero la base para el cuestionario sobre las vi sobre la matriz (mCuestionario())...

For i = LBound(mSegmentos()) To UBound (mSegmentos())
If mTipos(i) = "vi" Then
mCuestionario(i) = InputBox (mSegmentos(i) & Chr(13),"Cuestionario para facilitar la entrada de datos")
End If
Next

... y la dejamos a disposición para ser usado posteriormente...

For i = LBound(mCuestionario()) To UBound (mCuestionario())
oTexto = oHojaMatrizBase.getCellRangeByName( "C" & i+1 )
oTexto.setString(mCuestionario(i))
Next

Este tercer componente de la hoja MatrizBase nos permitirá desarrollar la segunda fase de esta propuesta de automatización, la cual tiene ya más similitud con un DocAp basado en un gestor Calc, del cual precisamente se diferencia a consecuencia del modo en que operamos con ese cuestionario (1). Pero como esta entrada es también final de fase, corresponde exponer en ella el script que hemos ido trabajando por partes en esta y en entradas anteriores.

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 SegTxt As String
Dim i As Integer
Dim n As Integer

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

'Eliminamos espacios mediante la función Trim()
For i = LBound(mSegmentos()) To UBound(mSegmentos())
SegTxt = mSegmentos(i)
mSegmentos(i) = Trim(SegTxt)
n = i+1 'Obtenemos la longitud de la matriz mSegmentos()
Next

'Calificamos los segmentos textuales
'tf -> texto fijo
'vi -> variable-input y variable-condicionada
'vg -> variable-gramatical
'sp -> signos de puntuación aislados
'sl -> segmento vacío

'Matrices complementarias:
' mTipos() -> para categorización de los segmentos
' mCuestionario -> para interface con usuario sobre vi
Dim mTipos(n) As String, mCuestionario(n) As String

'Identificación de categorías de los segmentos textuales (mTipos())
For i = LBound(mSegmentos()) To UBound(mSegmentos())
If mSegmentos(i) = "" Then
mTipos(i) = "sl"
ElseIf mSegmentos(i) = "," or mSegmentos(i) = "."  or mSegmentos(i) = ";" Then
mTipos(i) = "sp"
Else
mTipos(i) = InputBox(mSegmentos(i),"Categorización de los segmentos textuales","tf-vi-vg-sl-sp")
End If
Next

'Cuestionario para interface respecto a vi (mCuestionario())
For i = LBound(mSegmentos()) To UBound (mSegmentos())
If mTipos(i) = "vi" Then
mCuestionario(i) = InputBox (mSegmentos(i) & Chr(13),"Cuestionario para facilitar la entrada de datos")
End If
Next

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

Dim oHojaMatrizBase As Object
oHojaMatrizBase = ThisComponent.getSheets().getByName("MatrizBase")

' Copiamos la matriz mSegmentos() en la columna A
For i = LBound(mSegmentos()) To UBound (mSegmentos())
oTextoMatriz = oHojaMatrizBase.getCellRangeByName( "A" & i+1 )
oTextoMatriz.setString(mSegmentos(i))
Next

'Copiamos la matriz mTipos() en la columna B
For i = LBound(mTipos()) To UBound (mTipos())
oTextoMatriz = oHojaMatrizBase.getCellRangeByName( "B" & i+1 )
oTextoMatriz.setString(mTipos(i))
Next

'Copiamos la matriz mCuestionario() en la columna C
For i = LBound(mCuestionario()) To UBound (mCuestionario())
oTexto = oHojaMatrizBase.getCellRangeByName( "C" & i+1 )
oTexto.setString(mCuestionario(i))
Next

'Identificación de la vi condicionante de las vg
Dim posCond As Integer, valor As Integer
Dim viCond As String, conGen As String

'Valor de posición de la variable vi condicionante en la matriz mSegmentos() -> variable posCond
For i = LBound(mSegmentos()) To UBound (mSegmentos())
If mTipos(i) = "vi" Then
valor = MsgBox(mSegmentos(i),36,"VI condicionante de las vg")
If valor = 6 Then
posCond = i
Exit For
End If
End If
Next

'Contenido de la vi condicionante (viCond)
viCond = mSegmentos(posCond)

'Identificación del género consultando a la bdNombres (conGen)
conGen = CondGen(viCond)

'Creación de la hoja CondicGen
oHojas.insertNewByName("CondicGen", 3)

'Posicionamiento en la hoja CondicGen
Dim oHojaCond As Object
oHojaCond = ThisComponent.getSheets().getByName("CondicGen")

'Copia de los datos posición y género de la vi condicionante
Dim oTxtCond As Object

oTxtCond = oHojaCond.getCellRangeByName( "A1" )
oTxtCond.setString("Posición")

oTxtCond = oHojaCond.getCellRangeByName( "B1" )
oTxtCond.setString(posCond)

oTxtCond = oHojaCond.getCellRangeByName( "A2" )
oTxtCond.setString("Género")

oTxtCond = oHojaCond.getCellRangeByName( "B2" )
oTxtCond.setString(conGen)

End Sub

En el script se pueden identificar esas partes gracias a los comentarios, lo que nos ahorra dar más explicaciones de las necesarias.

 

NOTA (1) Veremos en su momento, porque aquí no trataremos sobre el desarrollo de esa segunda fase, que se trabaja también en base a un bucle y con recursos simples de input (InputBox() asociados a ciclos  que recorren las matrices que ahora guardamos como datos en MatrizBase 

No hay comentarios:

Publicar un comentario

Comenta esta entrada