27 enero 2016

Uso de las funciones strpbrk() y strspn()

Encuentro especialmente útil su uso para comprobar si los valores almacenados en una variable cumplen con un determinado patrón.

El formato de la primera función es strpbrk(cadena1,cadena2), ¿Qué hace?


Devuelve una subcadena de cadena1, desde el punto en que cualquiera de los caracteres de cadena2 sea localizado en cadena1. Si ninguno de los caracteres de cadena2 coincide con los de cadena1, la función nos devolverá una cadena vacía.

Veamos un ejemplo:

Supongamos que disponemos de un campo de entrada en el que sólo deseamos permitir el uso de letras no acentuadas, números y comas, es decir sin caracteres especiales. Un modo de impedirlo sería mediante el método siguiente:

On evKey
    If len(strpbrk(upp(pKey),'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,'))=0&len(pKey)>0
        Quit event handler (Discard event)
    End If


Si pKey contiene (por ejemplo) el caracter #, la función strpbrk() anterior devolvería una cadena vacía, ya que el caracter # no está contenido la cadena: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,

El uso de "Quit event handler (Discard event)" anulará la introducción del caracter #. La comparación "len(pKey)>0" se ha añadido para evitar el uso de "SystemKey events" o dicho de otro modo, la generación de eventos del sistema mediante el teclado.

El formato de la segunda es strspn(cadena1,cadena2), ¿Qué hace?


Devuelve el índice del primer carácter de cadena1, no coincidente con los contenidos en cadena2. Si todos los caracteres son coincidentes, la función devolverá el valor correspondiente al "len(cadena1)+1", es decir la longitud de cadena1 más uno.

Si (por ejemplo) quisiéramos comprobar que todos los caracteres contenidos en una determinada cadena coincidan con los permitidos, podríamos usar lo siguiente:

If strspn(upp(NumeroDeTelefono),'0123456789() -/')>len(NumeroDeTelefono)
    ; Todos los caracteres de variable NumeroDeTelefono
    ; pertenecen o están contenidos en el grupo 0123456789() -/
End If


Suponiendo que NumeroDeTelefono="01\5551234", la función strspn() anterior devolvería '3', ya que el tercer carácter no está entre el grupo de los permitidos, pero si su valor fuera NumeroDeTelefono="01/5551234" la función strspn() devolvería '11', ya que su longitud es '10'.

No hay comentarios: