Manejo de la BDGenero (I)
Automatización de textos con OOo Basic
Procedimiento basado en textos
Cuando creé el procedimiento de automatización texto-base planteé que el tratamiento de los documentos auxiliares se basaría inicialmente en el mero mantenimiento manual, así que era responsabilidad del profesional crear y actualizar directamente estos listados Calc. Esta labor debía ser previa a la aplicación del DocAp, ya que éste precisa acceder a información fiable y actualizada.
En entradas recientes (vg en esta) desarrollé una alternativa que facilita el mantenimiento semiautomatizado de la BDNombres. Ahora pretendo avanzar en esa línea respecto a la BDGenero.
Cuando trabajamos con la BDNombres para acceder a los nombres y a su género no necesitamos saber más que la vi--nombre del alumno o de la alumna, lo que significa que damos por hecha la segmentación del texto-base sin entrar en detalles al respecto. Ahora tenemos que tratar de forma sistemática y secuencial con los resultados de dicha segmentación si queremos (semi)automatizar el mantenimiento de la BDGenero, ya que es de los segmentos vg de nuestros textos de los que se alimenta.
El procedimiento que pretendo desarrollar ahora implica alimentar el contenido de BDGenero desde los segmentos vg identificados en nuestro texto-base y recogidos (contenido e identificador) en la hoja MatrizBase. Este es el primer reto y una diferencia respecto al manejo de BDNombres.
A pesar de esta diferencia, la solución será más compleja que la dada para actualizar BDNombres, pero no en cuanto procedimiento.
Lo que pretendo ahora es ir un poco más allá y desarrollar algún procedimiento que permita generar el tratamiento alternativo (m vs. f) del segmento. Si no lo conseguimos, o sólo parcialmente, siempre nos quedarán el procedimiento manual mediante funciones InputBox().
El procedimiento a desarrollar parte de cero en lo que al acceso a los datos se refiere, cosa que no tiene por qué ser así en una aplicación integrada del mismo dentro del procedimiento general de automatización de textos. Aunque supone más trabajo he creído necesario enfocarlo de este modo para acentuar su autonomía respecto al procedimiento general de automatización; así que dedicaré esta primera entrada al desarrollo de la primera fase del procedimiento: el acceso selectivo al contenido de los segmentos vg. En la siguiente me ocuparé de la segunda fase del traslado de esos datos al documento BDGenero.
Sub AccesoDatosMatriz
'Accedo a la hoja MatrizBase
Dim oHoja As Object
oHoja = ThisComponent.getCurrentController.getActiveSheet()
'Accedo a la columna B para identificar cuantos segmentos existen
'La columna A resulta engañosa por contener segmentos vacíos
Dim i As Integer, a As Integer, ii As Integer, iii As Integer
Dim oCont As Object
Dim sId As String
'La variable ii indica el número total de segmentos de la matriz-base
ii = 0
'La variable iii indica el número de segmentos vg
iii = 0
For i = 1 To 1000
oCont = oHoja.getCellRangeByName("B" & i)
sId = oCont.getString()
If sId <> "" Then
ii = ii + 1
If sId = "vg" Then
iii = iii + 1
End If
ElseIf sId = "" Then
Exit For
End If
Next
'Recorro la matriz-base buscando los segmentos vg para cargarlos en la matriz mvgTextos()
Dim oTexto As Object, oId As Object
Dim sTexto As String
Dim mvgTexto() As string
'La variable iii sirve para dimensionar la matriz mvgTexto()
ReDim mvgTexto(iii-1)
a = 0
'La variable ii sirve para establecer el recorrido del bucle
For i= 1 To ii
'Recorro la columna B buscando vg
oId = oHoja.getCellRangeByName("B" & i)
sId = oId.getString()
If sId = "vg" Then 'En su caso accedo a la columna A y copio el contenido en mvgTexto()
oTexto= oHoja.getCellRangeByName("A" & i)
sTexto = oTexto.getString()
mvgTexto(a) = sTexto
a = a + 1
End If
Next
'CONTROL de funcionamiento
MsgBox "Número de segmentos de la matriz " & (UBound(mvgTexto())+1)
For i = 0 To UBound(mvgTexto())
MsgBox "Segmento " & i+1 & Chr(13) & mvgTexto(i)
Next
End Sub
Espero que los comentarios del código te ayuden a entender su funcionamiento que, como ves, se desarrolla del siguiente modo:
- Accedo a la hoja que contiene la matriz-base
oHoja = ThisComponent.getCurrentController.getActiveSheet() - Y recorro su columna B para establecer las dimensiones de esa matriz y de la que se construirá para contener los datos de interés (el texto de las vg). De esto se encarga el primer bucle
For i = 1 To 1000 - Una vez definido el recorrido y la dimensión de la matriz contenedora
ReDim mvgTexto(iii-1)recorro de nuevo la matriz sobre la columna BFor i= 1 To iibuscando esta vez las vg para pasar su contenido amvgTexto(a) = sTexto, siempre que se cumpla la condiciónIf sId = "vg" Theny después de acceder al contenido (columna A)oTexto= oHoja.getCellRangeByName("A" & i)
Al final del script incluyo código para controlar el funcionamiento de esta primera fase del procedimiento. Posteriormente prescindiremos de él; también habrá que cambiar el nombre del script para ajustarlo a su nivel de desarrollo.
Hasta aquí hemos conseguido acceder selectivamente a los segmentos de interés (vg) por lo que disponemos ahora de su contenido para ejecutar la segunda fase: trasladarlo a BGGenero, cosa que trataré en una nueva entrada.
No hay comentarios:
Publicar un comentario
Comenta esta entrada