Excel

¡Identificando esos molestos personajes ocultos!

De vez en cuando, al manipular cadenas, suceden cosas extrañas que pueden ser difíciles de descubrir.

  • ¿Por qué hay un salto de línea?
  • ¿Por qué hay un espacio?

¡Aquí es cuando ejecutar la cadena de texto a través de una función de conversión ASCII puede arrojar algunas respuestas!

'---------------------------------------------------------------------------------------
' Procedure : String_ConvertToASCII
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : 
' Purpose   : Converts a string into its numeric ascii representation
' Copyright : The following is release as Attribution-ShareAlike 4.0 International
'             (CC BY-SA 4.0) - 
' Req'd Refs: None required
'
' Input Variables:
' ~~~~~~~~~~~~~~~~
' sInput    : String to output as ascii numerals
' sSeparator: Separator to use between numerals (default to using ,)
'
' Usage:
' ~~~~~~
' ? String_ConvertToASCII("testing.")
'   Returns -> 116,101,115,116,105,110,103,46

'
' Revision History:
' Rev       Date(yyyy-mm-dd)        Description
' **************************************************************************************
' 1         unknown                 Initial Release
' 2         2024-06-05              Public Release
' 3         2024-06-05              Fix issue related to Asc vs. AscW
'                                   Added optional HTML Output
'---------------------------------------------------------------------------------------
Public Function String_ConvertToASCII(ByVal sInput As String, _
                                      Optional sSeparator As String = ",", _
                                      Optional bOutputAsHTML As Boolean = False) As String
On Error GoTo Error_Handler
    Dim lAsciiVal As Long
    Dim i                     As Long

    If Len(sInput) = 0 Then GoTo Error_Handler_Exit
    
    For i = 1 To Len(sInput)
        lAsciiVal = AscW(Mid(sInput, i, 1)) 'Inverse => Chr(#) or ChrW() if # > 255
        If lAsciiVal  0 Then  'remove trailing separator
        String_ConvertToASCII = Left(String_ConvertToASCII, Len(String_ConvertToASCII) - Len(sSeparator))
    End If
 
Error_Handler_Exit:
    On Error Resume Next
    Exit Function
 
Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Source: String_ConvertToASCII" & vbCrLf & _
           "Error Number: " & Err.Number & vbCrLf & _
           "Error Description: " & Err.Description & _
           Switch(Erl = 0, "", Erl  0, vbCrLf & "Line No: " & Erl) _
           , vbOKOnly + vbCritical, "An Error has Occurred!"
    Resume Error_Handler_Exit
End Function

La salida le permitirá revisar los caracteres presentes, incluso aquellos que necesariamente podrá ver al ‘imprimir’ la cadena en la ventana inmediata, lo que le permitirá tomar las medidas necesarias para reemplazar o eliminar contenido extraño o inesperado.

Así que puedes usarlo para procesar cualquier cadena:

? String_ConvertToASCII("testing.")

Lo que generará algo como:

116,101,115,116,105,110,103,46

Luego puede revisar estos valores de salida comparándolos con tablas ASCII como:

Y más allá de los 255, tenemos que recurrir a otros conjuntos de caracteres. Una referencia al respecto sería:

Si está buscando algunos textos de muestra para probar funciones de cadena, puede consultar:

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba