jueves, 26 de septiembre de 2024

Funciones. Textos.

Eliminar espacios.

Decía en la [entrada anterior] que los espacios situados al inicio y/o al final de una cadena no podían considerarse de igual modo que los intermedios o de separación de las palabras que conforman una cadena de texto. En consecuencia, para su manejo necesitamos utilizar alguna función que complemente a Len().


Mientras que los espacios intermedios son parte constituyente de toda cadena que conste de más de una palabra, los espacios que pueden aparecer al inicio y/o al final de la cadena pueden tener su origen en algún tipo de error en el manejo de los recursos de entrada de datos puestos a disposición del usuario. Por ese motivo pueden resultar perjudiciales para el correcto procesamiento de la cadena (1). 

Para estos casos, además de controlar la presencia del error mediante Len() (ver nota 1), disponemos de la función Trim(). Esta función recibe un único parámetro (la cadena a analizar o la variable que la referencia) y que tiene por cometido eliminar los espacios en blanco (que no los caracteres) iniciales y finales de una cadena. Si esa cadena no tiene espacios en blanco al inicio o al final, Trim() simplemente la deja como está (no devuelve Error). 

Supongamos que sCad1="   Salió corriendo   " contiene (como es evidente y con independencia del motivo) espacios al inicio y al final, si aplicamos la función Trim(sCad1) el resultado será la misma cadena sin esos espacios (sCad1="Salió corriendo"), lo que equivale a reparar en posible error.

Por lo que respecta al uso de Trim() en combinación con Len() o independiente de esta segunda función, varias son las formas en que se puede expresar:
  • Independiente: Trim(sCad1)
  • En sucesión: Trim(sCad1) -> Len(sCad1)
  • Como expresión única combinada: Len(Trim(sCad1))
  • O condicionada: If Len(sCad1) > nC Then Trim(sCad1) (para nC como número esperado de caracteres de sCad1)
Pongamos mejor un ejemplo para entender la utilidad práctica de ambas funciones. Supongamos, para ello, que la respuesta esperada a un ítem sea sCad1="Salió corriendo", y que la dada por un alumno mediante InputBox() (usado como interface-Input) fuera " Salió corriendo", esto es, un espacio indebido al inicio (podía ser también al final); en este caso la valoración del ítem de la prueba mediante If sResp1=sCad1 Then iPuntua1 = 1 sería F, o lo que es lo mismo falsamente de "incorrecta", ya que ambas cadenas no son la misma para OOo Basic, pero sí lo son desde el punto de vista del objetivo de la prueba (evaluar la comprensión lectora). 

En este caso, bien cautelarmente, bien previa constatación de la presencia de espacios indebidos mediante Len(), procederíamos a aplicar la función Trim() a la respuesta (sCad1), antes de compararla con la formulación correcta. Por ejemplo (2):

Sub PruebaTrim

Dim sCorrecta As String, sRespuesta As String, sValora As String

sCorrecta = "Salió corriendo"

'Se presupone la presentación de un texto (oral o por escrito) y el planteamiento
'de un ítem en el que la respuesta (literal, por ejemplo) se ajuste a sCorrecta

sRespuesta = InputBox("¿Qué hizo Juan?")

If Len(sRespuesta) > Len(sCorrecta) Then 
sRespuesta = Trim(sRespuesta)
End If

If sRespuesta = sCorrecta Then
sValora = "Muy bien. Juan salió corriendo."
Else
sValora = "Lo siento. Tu respuesta no ha sido correcta." & Chr(13) &_
  "La respuesta correcta es: Salió corriendo"
End If

MsgBox sValora   

End Sub


NOTAS.

(1) Conocida la extensión de una variable alfanumérica, la función Len() nos puede servir para conocer si la entrada de datos ha sido correcta o contiene errores como los indicados en el texto de la entrada. En caso de que se constate el error podremos actuar en consecuencia, precisamente gracias a la función que se explica a continuación.
(2) El ejemplo puede parecer algo enrevesado, especialmente por la inclusión del condicional If para la comprobación mediante Len(), pero muestra claramente la utilidad de Trim() en un caso concreto y crítico. Cierto que hay otras posibles soluciones, pero esta no deja de ser correcta. Lo que es importante es la asignación del resultado de la aplicación de Trim() a una variable (en este caso a la misma que es sometida a Trim(), ya que la sola aplicación de la función no permite su ejecución (no es lo mismo Trim(sCad1) -uso incorrecto -, que sCad1 = Trim(sCad1) -uso correcto).

No hay comentarios:

Publicar un comentario

Comenta esta entrada