Automatización de la evaluación
La prueba PLON-R. Fonología es un buen ejemplo (y motivo) para que nos planteemos cómo resolver la presentación de los reactivos cuando ésta requiere (en este caso por procedimiento estandarizado) un ajuste en función de la edad del niño. Aquí el inicio es común a todas las edades, pero la finalización está en función de la edad, es variable en número de reactivos e incremental.
Es posible abordar la automatización de la presentación de este tipo de pruebas desde diferentes enfoque, unos más complejos, otros más simples, aunque a veces la simplicidad resulta serlo menso de lo que parece.
Empecemos por una posible solución, que se concreta como distintas opciones de presentación, adaptadas a priori a las exigencias de cada edad: una pantalla para tres años, otra para cuatro y así hasta la pantalla de seis años, que es la edad máxima. En total disponemos de cuatro posibilidades y sólo mostraremos aquella que se ajuste al contenido de la variable condicionante (la edad).
En OOo Basic esta es la forma en que se concreta el procedimiento que lo hace posible, empezando por el código de acceso a la pantalla (hoja) de cada edad, inicialmente oculta:
Sub IrCuestionario
'Variables
Dim oHoja As Object, oCelda As Object
Dim Edad As String
Dim al_edad As Integer
'Acceso al valor de edad
oHoja = ThisComponent.getSheets().getByName("Resultados")
oCelda = oHoja.getCellRangeByName("B4")
Edad = oCelda.GetString()
al_edad = CInt(Edad)
'Acceso al cuestionario en función de la edad
If al_edad = 3 Then
vHoja(1,True)
PasoHoja (2)
ElseIf al_edad = 4 Then
vHoja(2,True)
PasoHoja (3)
ElseIf al_edad = 5 Then
vHoja(3,True)
PasoHoja (4)
ElseIf al_edad >= 6 Then
vHoja(4,True)
PasoHoja (5)
End If
vHoja(0,False)
End Sub
Sub Puntuar_3a
Dim elem As IntegerDim edad As String'Elementos en función de la edadelem = 20'Llamada a función de captura de edadedad = al_edad()'Llamar a la subrutina Puntuar()Puntuar(elem,edad)
End Sub
Function al_edad () As string
Dim oHoja As Object, oCelda As ObjectDim i As IntegerDim edad As String'Acceso a Resultados para capturar la edadoHoja = ThisComponent.getSheets().getByName("Resultados")oCelda = oHoja.getCellRangeByName("B4")edad = oCelda.getStringal_edad = edad
End Function
Sub Puntuar (n_i As Integer, edad As String)
Dim oHoja As Object, oCelda As Object
Dim i As Integer, edad_n As Integer, nh As Integer
Dim mDatos(n_i) As Integer
'Canalización hacia la página de registro en función de la edad
edad_n = CInt(edad)
If edad_n < 6 Then
oHoja = ThisComponent.getSheets().getByName("Lista" & edad & "a")
ElseIf edad_n >= 6 Then
oHoja = ThisComponent.getSheets().getByName("Lista6a")
End If
'Paso de datos a matriz de resultados
For i = 0 To UBound(mDatos())
oCelda = oHoja.getCellRangeByName("E" & i+4)
mDatos(i) = oCelda.getValue
Next
'Copia de los datos a la hoja Resultados
oHoja = ThisComponent.getSheets().getByName("Resultados")
'Copia de los datos en la hoja
For i = 0 To UBound(mDatos())
oCelda = oHoja.getCellRangeByName("B" & i+6)
oCelda.setValue(mDatos(i))
Next
'Identificar la hoja de datos a ocultar
If edad_n = 3 Then
nh = 1
ElseIf edad_n = 4 Then
nh = 2
ElseIf edad_n = 5 Then
nh = 3
ElseIf edad_n >= 6 Then
nh = 4
End If
'Movimiento a la hoja DatosId
vHoja(0,True)
PasoHoja(0)
vHoja(nh,False) 'Oculta la hoja de datos que corresponde según la edad del sujeto
'Llamar a la subrutina para borrar los datos del cuestionario de puntuación
BorrarPtos(edad_n)
End Sub
El script principal (Puntuar_3a) se repite tantas veces como periodos etarios tiene el test (cuatro) y aparentemente, como puedes ver, es muy simple: en realidad se limita a entregar un dato (elem = 20) y a solicitar otro a una función (edad = al_edad()), para entregar ambos como parámetros a una subrutina (Puntuar(elem,edad)), que es la que se encarga de la mayor parte del trabajo. Esto es así porque la subrutina es, en realidad, la abstracción de lo que podría contener el script principal si fuera único, si sólo hubiera un bloque de edad y no cuatro.
Mientras que la función al_edad() es muy simple (se limita a acceder a la celda que contiene la edad del alumno para entregársela al script), la subrutina es compleja:
- Se sitúa en la página empleada para recoger los datos
- Captura esos datos
- Accede a la página de almacenamiento de datos y los copia
- Visualiza la hoja principal y desplaza el foco hacia ella
- Identifica la hoja de registro que se debe ocultar
- La oculta esa hoja de registro
- Llama a la subrutina de borrado del contenido de la hoja de registro
Sub BorrarPtos(edad As Integer)
Dim oHoja As Object, oCelda As Object
Dim i As Integer, n As Integer
Dim IdPag As String
'Ir a la página
If edad = 3 Then
IdPag = "Lista3a"
n = 20
ElseIf edad = 4 Then
IdPag = "Lista4a"
n = 43
ElseIf edad = 5 Then
IdPag = "Lista5a"
n = 55
ElseIf edad >= 6 Then
IdPag = "Lista6a"
n = 60
End If
'Nos posicionamos en la hoja y recorremos las celdas para borrar el contenido
oHoja = ThisComponent.getSheets().getByName(Idpag)
For i = 0 To n
oCelda = oHoja.getCellRangeByName("E" & i+4)
oCelda.setString("")
Next
End Sub
Se selecciona la hoja sobre la que actual mediante una estructura condicional y borrar su contenido mediante un bucle que lo recorre. El límite superior de ese recorrido viene definido también por la edad del sujeto, ya que es esta la que determina el número de reactivos que se aplican y, por tanto, de posibles celdas en las que se recoge la puntuación.

No hay comentarios:
Publicar un comentario
Comenta esta entrada