Manejo de la BDGenero (I)
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 manualmente estos listados Calc. Esta labor debía ser previa a la aplicación del DocAp, ya que este precisaba contar con acceso 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 su género gramatical asociado no necesitamos saber más que la vi-nombre (en este nuestro primer caso) 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. Pero 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 input-manual mediante funciones InputBox(). Pero vayamos por partes y no adelantemos acontecimientos.
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 del 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 entrada me ocuparé de la segunda fase del procedimiento: el traslado de esos datos al documento BDGenero, si es que resulta pertinente, claro.
Sub AccesoDatosMatriz'Accedo a la hoja MatrizBaseDim oHoja As ObjectoHoja = ThisComponent.getCurrentController.getActiveSheet()'Accedo a la columna B para identificar cuantos segmentos existen'La columna A resulta engañosa por contener segmentos vacíosDim i As Integer, a As Integer, ii As Integer, iii As IntegerDim oCont As ObjectDim sId As String'La variable ii indica el número total de segmentos de la matriz-baseii = 0'La variable iii indica el número de segmentos vgiii = 0For i = 1 To 1000oCont = oHoja.getCellRangeByName("B" & i)sId = oCont.getString()If sId <> "" Thenii = ii + 1If sId = "vg" Theniii = iii + 1End IfElseIf sId = "" ThenExit ForEnd IfNext'Recorro la matriz-base buscando los segmentos vg para cargarlos en la matriz mvgTextos()Dim oTexto As Object, oId As ObjectDim sTexto As StringDim 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 bucleFor i= 1 To ii'Recorro la columna B buscando vgoId = 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) = sTextoa = a + 1End IfNext'CONTROL de funcionamientoMsgBox "Número de segmentos de la matriz " & (UBound(mvgTexto())+1)For i = 0 To UBound(mvgTexto())MsgBox "Segmento " & i+1 & Chr(13) & mvgTexto(i)NextEnd 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 buche For (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 B (For i= 1 To ii), buscando esta vez las vg para pasar su contenido a mvgTexto() (mvgTexto(a) = sTexto), siempre que se cumpla la condición (If sId = "vg" Then ) y después de acceder al contenido (columna A) (oTexto= oHoja.getCellRangeByName("A" & i))
Hasta aquí hemos conseguido acceder selectivamente a los segmentos de interés (vg) por lo que disponemos ahora del contenido de dichos segmentos para ejecutar la segunda fase: trasladar el contenido a BGGenero, cosa que desarrollaré en una nueva entrada.

No hay comentarios:
Publicar un comentario
Comenta esta entrada