Uso de la BDNombres (I)
Debería llamar la atención el tratamiento que he dado a los documentos auxiliares de BD teniendo en cuenta el papel que juegan en el funcionamiento del modelo. Esta tratamiento primero es simplemente una forma de aparcar el o los problemas que implica el necesario recurso a los datos contenidos en estos soportes en el proceso de automatización documental.
Quiero decir con lo anterior que no parece muy coherente tratar de automatizar un procedimiento y recurrir para ello a datos que se han obtenido de forma totalmente manual. La [entrada precedente] es ya un intento de modificar este planteamiento respecto a una de las fuentes de datos, pero se queda precisamente a las puertas de incidir en su tratamiento. De ahí la pertinencia de esta entrada, que es, en ese sentido, continuidad de la anterior e inicio del análisis del papel de las BD externas en el desarrollo de la propuesta de automatización (1).
La BDNombres cumple un doble papel, aunque muy similar, en las dos fases del proyecto: en ambas nos ayuda a identificar el género gramatical asociado al nombre, a la vi-nombre para ser más exacto, siendo éste determinante primero (fase de preparación) para entender la asociación (condicionalidad gramatical de genero) entre la vi-nombre y las vg (2) y en la segunda fase serlo aun más, al facilitar la identificación del género del nombre del alumno sujeto del informe y, en consecuencia, permitir la comparación de géneros y facilitar así la ejecución de la automatización del tratamiento de las vg dependientes del mismo (3).
El planteamiento consecuente con lo anterior es que es posible utilizar el propio acceso del algoritmo a la BDNombres para añadir a ella nuevos registros, automatizando su actualización en la fase preparatoria y semiautomatizándola en la fase DocAp (4).
Veamos cómo proceder en la fase preparatoria, aunque para no entrar en el tema de [otra entrada] simplificaré la llamada a procedimiento usando un script simple que llama a la subrutina y entrega como parámetros los datos que nos interesan (AccesoBDNombres(Nombre,Genero))...
AccesoBDNombres(Nombre,Genero)
... a partir de aquí desarrollo la subrutina que automatizar la incorporación de nuevos nombres a la BDNombres
Sub AccesoBDNombres(NombreNuevo, GeneroNuevo)
'Variables
Dim sRuta As String
Dim mArg()
Dim oDocumento As Object, oNombre As Object, oGenero As Object
Dim oHoja As Object
Dim i As Integer
Dim NombreCol As String, NombreGen As String
'Accedo a la BDNombres y a la hoja que contiene el listado de datos
sRuta = ConvertToUrl("C:/Users/TuIdentificador/Escritorio/Textos/BDNombres.ods")
oDocumento = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mArg() )
oHoja = oDocumento.getCurrentController.getActiveSheet()
'Recorro la columna de nombres buscando el nombre de referencia
For i = 1 To 1000
oNombre = oHoja.getCellRangeByName( "A" & i )
NombreCol = oNombre.getString()
If NombreCol = NombreNuevo Then
MsgBox "No se añade nuevo registro porque el nombre ya existe"
Exit For
ElseIf NombreCol = "" Then
oNombre.setString(NombreNuevo)
oGenero = oHoja.getCellRangeByName( "B" & i )
oGenero.setString(GeneroNuevo)
MsgBox "Se ha añadido nuevo registro: nombre y género"
Exit For
End If
Next
'Guardo los cambios
oDocumento.store()
'Cierro el archivo
oDocumento.close(True)
End Sub
En síntesis, el procedimiento es simple: mediante un bucle For (For i = 1 To 1000) se recorre el listado de nombres comparando cada uno de ellos con el nombre aportado como parámetro. Esta comparación se realiza mediante un condicional If que contempla dos posibles situaciones: que el nombre ya exista (If NombreCol = NombreNuevo Then), situación en la que se informa y se sale del bucle, o que no exista; en este segundo caso se produce la situación que recoge la siguiente línea de código: el bucle obtiene como resultado un valor vacío (ElseIf NombreCol = "" Then) que indica ausencia de igualdad entre el nombre aportado y los del listado, lo que equivale a decir que ese nombre no está en la lista de nombres. En este caso se escribe el nombre (oNombre.setString(NombreNuevo)) y mediante el mismo procedimiento, el género (oGenero.setString(GeneroNuevo)), aunque aquí debemos posicionarnos antes en la celda correspondiente (oGenero = oHoja.getCellRangeByName( "B" & i )).
Para finalizar guardamos los cambios (oDocumento.store()) y cerramos el documento BDNombres (oDocumento.close(True)).
Dado que el procedimiento a seguir desde el script de la fase DocAp es diferente, y que presenta en realidad mayor complejidad, he decidido opto por tratarlo en otra entrada para no extender esta y para facilitar la comprensión de ambas..
NOTAS
(1) En efecto, inicio aquí la revisión de las bases de datos por BDNombres con idea de continuar en posteriores entradas con otras BD, la ya incluida en este primer proyecto (BDGenero) y otras que puedan surgir posteriormente como necesarias.
(2) Aprovechar las implicaciones de esta condicionalidad, ahora en sentido inverso, es lo que nos permite automatizar la identificación del género del nombre del alumno, haciendo innecesario recurrir en la fase de preparación a la BDNombres; pero esto deja sin resolver el tratamiento de la propia BD y sin extraer las posibles implicaciones que este procedimiento alternativo tiene para el trabajo con esa base de datos. Con el agravante de que ese enfoque nos priva de plantear un procedimiento interesante y no nos deja otra opción que el tratamiento manual de los datos para afrontar la segunda fase del procedimiento (el DocAp)
(3) Como recordarás, incluyendo que resulte o no necesario desarrollar esa parte del procedimiento, ya que si ambos nombres son coincidentes en cuanto a género gramatical, las vg no cambiarán.
(4) En la fase preparatoria la identificación del género es posible recurriendo al procedimiento inverso derivado de la asociación vg - vi-nombre, que nos permite obtener tanto el nombre como su género. En la fase DocAp no contamos con esa posibilidad, así que sólo podremos automatizar el nombre y deberemos solicitar como input el género. Hasta el momento con cuento con recursos para llevar más allá la automatización, pero este avance en automatización es significativo.
No hay comentarios:
Publicar un comentario
Comenta esta entrada