Ver Mensaje Individual
  #6 (permalink)  
Antiguo 11/02/2009, 16:55
Avatar de Txoco
Txoco
 
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: añadir un caracter a un string

Pues nop, hasta donde yo se, no hay una función tan específica... no te queda otra que comprobar la cadena caracter a caracter e ir poniendo comillas según detectes que comienza o acaba una expresión de sólo letras.

Te propongo esta función, que es un poco salvaje en el sentido de que hace un uso abusivo de Replace, pero simplifica mucho el algoritmo (aunque no lo he comprobado, probablemente incluso sea más rápida que comprobar caracter a caracter), como puedes ver:

Código:
Public Function EntrecomillaAlfa(ByVal wExpr As String) As String
Dim i  As Long
Dim Symbol As String
Dim wa As String * 1

    Symbol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    For i = 1 To Len(Symbol)
        wa = Mid(Symbol, i, 1)
        If InStr(1, wExpr, wa, vbTextCompare) > 0 Then
            wExpr = Replace(wExpr, wa, Chr(0) & (wa & Chr(0)), , , vbTextCompare)
            ' (Deja los paréntesis que parece que sobran, es una pequeña optimización)
        End If
    Next i
    
    If InStr(1, wExpr, Chr(0)) > 0 Then
        EntrecomillaAlfa = Replace(Replace(wExpr, Chr(0) & Chr(0), vbNullString), Chr(0), """")
    Else
        EntrecomillaAlfa = wExpr
    End If
End Function
Ventajas:
- Devuelve entrecomilladas todas las secuencias de cualquier combinación y longitud de caracteres que pongas en la variable Symbol (puedes incluso ponerla como un parámetro opcional para darle más potencia)
- Es muy fácil de ampliar o personalizar (supón que un día también necesites entrecomillar la "ñ", o el punto, o que no quieres incluir la letra "e" para utilizarla como constante); sólo tienes que añadir o quitar los caracteres que quieras a Symbol.

Desventajas:
- Tal y como está definida, convierte todos los caracteres a entrecomillar a como estén escritos en Symbol (a mayúsculas en este caso: EntrecomillaAlfa("ABC-(32/J)+a") devuelve "ABC"-(32/"J")+"A"), aunque esto se puede solucionar con pocos cambios.
- Las funciones matemáticas también se encerrarán entre comillas (EntrecomillaAlfa("cos(32-B)" = "COS"(32-"B")). Habría que hacer algunas comprobaciones antes de este algoritmo para evitarlo, pero no es complicado.

Notas:
- Si tus expresiones nunca van a tener más de una letra, puedes eliminar la última condición y devolver directamente wExpr, para optimizar un poco más.
- Si las expresiones de entrada ya tienen comillas, en el resultado te las va a duplicar, así que deberías poner algún control antes para quitarlas... eso te lo dejo a tí

Pregunta todas tus dudas... reconozco que es un código un poco... particular...
__________________
wile sona li mute e sona