Access

Agregar un término a una cadena cada enésimo carácter

Mientras trabajaba en mi último proyecto favorito:

Necesitaba «maquillar» algunas firmas en un formato más común. Es decir, necesitaba insertar un espacio cada 2 caracteres para que coincidiera con el formato que ya estaba usando.

Mi objetivo original era muy simple, tenía cadenas como:

53514C69746520666F726D6174203300

y yo quería

53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00

Entonces, simplemente quería insertar un espacio después de cada segundo carácter en la cadena.

Agregar un espacio cada 2 caracteres

Así que rápidamente preparé una función para recorrer la cadena y listo, tenía lo que necesitaba.

'---------------------------------------------------------------------------------------
' Procedure : AddSpaceEveryTwoChars
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : 
' Purpose   : Insert a space every 2 characters in a string
' 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 insert the spaces into
'
' Usage:
' ~~~~~~
' AddSpaceEveryTwoChars("ECA5C100")
'   Returns -> EC A5 C1 00
'
' Revision History:
' Rev       Date(yyyy-mm-dd)        Description
' **************************************************************************************
' 1         2024-11-27              Initial Release
'---------------------------------------------------------------------------------------
Function AddSpaceEveryTwoChars(ByVal sInput As String) As String
    Dim sOutput               As String
    Dim lCounter              As Long

On Error GoTo Error_Handler

    For lCounter = 1 To Len(sInput) Step 2
        sOutput = sOutput & Mid(sInput, lCounter, 2) & " "
    Next lCounter

    AddSpaceEveryTwoChars = Trim(sOutput)
    
Error_Handler_Exit:
    On Error Resume Next
    Exit Function
 
Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Source: AddSpaceEveryTwoChars" & 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

Agregar un término cada enésimo lugar

Eso me hizo pensar en hacer más flexible la función anterior. ¿Qué pasa si quisiera insertar algo más que un espacio? ¿Qué pasa si quisiera que el espaciado fuera distinto de cada segundo carácter? Y así, desarrollé:

'---------------------------------------------------------------------------------------
' Procedure : AddTermEveryNChars
' Author    : Daniel Pineault, CARDA Consultants Inc.
' Website   : 
' Purpose   : Insert a 'term' every Nth character within the supplied string
' 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 insert the term into
' sInsertionTerm: Term to be added
' lStepSize     : Size of the term step, so every how many characters should the
'                   insertion term be added
'
' Usage:
' ~~~~~~
' ? AddTermEveryNChars("ECA5C100")
'   Returns -> EC A5 C1 00
'
' ? AddTermEveryNChars("ECA5C100", "~", 3)
'   Returns -> ECA~5C1~00
'
' Revision History:
' Rev       Date(yyyy-mm-dd)        Description
' **************************************************************************************
' 1         2024-11-27              Initial Release
'---------------------------------------------------------------------------------------
Function AddTermEveryNChars(ByVal sInput As String, _
                            Optional sInsertionTerm As String = " ", _
                            Optional lStepSize As Long = 2) As String
    Dim iIteration            As Long
    Dim lCounter              As Long
    Dim sOutput               As String
    Dim lInputLength          As Long
    Dim lNoIterations         As Long
    
On Error GoTo Error_Handler

    lInputLength = Len(sInput)
    lNoIterations = Int(lInputLength / lStepSize) + IIf((lInputLength / lStepSize) > Int(lInputLength / lStepSize), 1, 0)

    For lCounter = 1 To lInputLength Step lStepSize
        iIteration = iIteration + 1
        sOutput = sOutput & Mid(sInput, lCounter, lStepSize)
        If iIteration < lNoIterations Then sOutput = sOutput & sInsertionTerm
    Next lCounter

    AddTermEveryNChars = sOutput
    
Error_Handler_Exit:
    On Error Resume Next
    Exit Function
 
Error_Handler:
    MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _
           "Error Source: AddTermEveryNChars" & 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

He predeterminado los argumentos de entrada opcionales para que se comporte como la función original (es decir, un espacio cada segundo carácter), pero este es más flexible en caso de que surja la necesidad de desviarse e insertar el término que desee con el espaciado que elija.

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