martes, 23 de diciembre de 2025

Evaluación

Automatización de la evaluación

Input incremental (II)




Dado que en la [entrada anterior] establecimos previamente los diferentes soportes de interfaz para la fase input, en esta daremos un paso más y crearemos esa interfaz a partir de los datos de una matriz y en función de la edad. En este caso es así dadas las características de la prueba de referencia (PLON-R. Fonología).

No se trata de un procedimiento totalmente automatizado, ya que la hoja sobre la que crearemos la interfaz y parte de los elementos que contiene han tenido que ser creada previamente, pero lo que ahora nos interesa es la parte nuclear de su contenido: el listado de palabras que deberá producir el alumno y que deberemos evaluar nosotros.

Este modo de resolver la cuestión nos ahorra crear tantas hojas/interfaces como grupos input existan en la prueba. Así en PLON-R. Fonología resolvemos con una lo que según el procedimiento anterior precisaba cuatro. Se eliminan también unos cuantos script asociados al manejo de esas hojas.

Sub CrearLista

Dim oHoja As Object, oCelda As Object
Dim listado() As String

Dim annos As String
Dim edad As Integer

annos = al_edad()
edad = CInt(annos)

If edad > 6 Then
edad = 6
End If

listado() = copiaPal(edad)

'Acceso a la página

oHoja = ThisComponent.getSheets().getByName("ListaPal")

oCelda = oHoja.getCellRangeByName("B2")
oCelda.setString("Palabras")
oCelda = oHoja.getCellRangeByName("C2")
oCelda.setString("Puntos")

For i = 0 To UBound(listado())
oCelda = oHoja.getCellRangeByName("B" & i+3)
oCelda.setString(listado(i))
Next

End Sub

Pasemos ahora a analizar cómo se desarrolla esta propuesta. El primer paso consiste en acceder a la edad del sujeto, ya que ésta es la que determinará el desarrollo del resto. Para ello, desde nuestro script principal, haremos uso de la función, creada en versiones anteriores, que nos permitía acceder a ese datos (annos = al_edad()). 

Function al_edad () As string

Dim oHoja As Object, oCelda As Object
Dim i As Integer
Dim edad As String

'Acceso a Resultados para capturar la edad
oHoja = ThisComponent.getSheets().getByName("Resultados")
oCelda = oHoja.getCellRangeByName("B4")
edad = oCelda.getString

al_edad = edad

End Function

Una vez que disponemos de ese dato (string) lo convertimos a integer (edad = CInt(annos)) para operar con él (If edad > 6 Then -> edad = 6 -> End If), evitando posibles errores en el manejo de los datos de edad cuando ésta supera los 6 años.

El paso siguiente consiste en acceder a la función que nos da acceso al contenido con el que trabajar (listado() = copiaPal(edad)): el listado de palabras que corresponde por edad y que deberemos recuperar de la hoja Matrices.

Function CopiaPal(al_edad As Integer)

'para acceso a objetos
Dim oHoja As Object, oCelda As Object
Dim listaPal () As String

'Para acceso a datos
Dim i As Integer
Dim max As Integer
Dim edades() As Integer
Dim ptos_max() AS Integer

edades = Array(3,4,5,6)
ptos_max = Array(21,44,56,61)

'Calculo y establecimiento del límite superior del listado

For i = 0 To UBound(edades())
If edades(i) = al_edad Then
max = ptos_max(i)
End If
Next 

ReDim listaPal(max-1)

'Acceso a la hoja que contiene la base de datos

oHoja = ThisComponent.getSheets().getByName("Matrices")

For i = 0 To UBound(listaPal())
oCelda = oHoja.getCellRangeByName("I" & i+1)
listaPal(i) = oCelda.getString()
Next

CopiaPal = listaPal()

End Function

Esta función accede al contenido de la hoja Matrices y accede al valor numérico de la extensión del listado que debe crear haciendo uso del parámetro al_edad que le hemos pasado desde el script principal, mediante una analogía entre los valores de posición de la matriz edades y los de la matroz ptos_max.

For i = 0 To UBound(edades())
If edades(i) = al_edad Then
max = ptos_max(i)
End If
Next 

Con ese dato de longitud o límite superior redimensionamos la matriz que contendrá el listado de palabras (ReDim listaPal(max-1)). Mediante un segundo bucle recorremos la columna I y accedemos a las palabras que incluimos como elementos de la matriz (listaPal(i) = oCelda.getString()) que la función devolverá al script principal (CopiaPal = listaPal()).

De regreso a éste, sólo nos queda posicionarnos en la hoja sobre la que escribir los títulos de las columnas...

oCelda = oHoja.getCellRangeByName("B2")
oCelda.setString("Palabras")

... y el listado y proceder a ello mediante el procedimiento ya conocido de asignar contenido a las celdas.

For i = 0 To UBound(listado())
oCelda = oHoja.getCellRangeByName("B" & i+3)
oCelda.setString(listado(i))
Next

Si deseáramos completar el procedimiento y dejar listo los materiales para un uso posterior deberíamos implementar código que capture el resultado de la aplicación del test (puntuación de cada ítem) para trasladarlos a la hoja Resultados, eliminando antes el contenido de la lista de palabras y de la puntuación.

A parte de este posible desarrollo del script, también nos podemos plantear otros que implican establecer un condicionamiento múltiple. Un ejemplo sobre PLON-R. Fonología podría ser seleccionar únicamente los fonemas y no los grupos fonémicos, o sólo los fonemas oclusivos, o sólo los fonemas sonoros... Los ejemplos son múltiples, tantos como variables diferenciadoras hayamos establecido. Además esas subcategorizaciones podemos establecerlas secuencialmente o mediante condicionales anidados. En cualquier caso, lo interesante es que podemos hacer uso del procedimiento básico que hemos explicado en esta entrada para automatizar la selección del contenido sobre el que trabajar en función de los criterios que nos interese aplicar en cada caso.  

No hay comentarios:

Publicar un comentario

Comenta esta entrada