Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/07/2008, 16:27
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: copiar parte de un string!!!

Oops... David tiene razón, pero lo puedo explicar... tengo un módulo en el que he ido agregando todas las funciones de este tipo que he ido programando, entre ellas LeftToString y RightFromString... el ejemplo que puse, RightToString, lo puse mal, por confiarme al ser un código corto y teclearlo en lugar de copiarlo y pegarlo. Es sólo cuestión de etimología: quien sepa inglés sabe que "to" es "hasta" y "from", "desde". Así que me corrijo y (está vez sí) copio y pego las dos funciones y alguna más similar, por si a alguien le sirven. Código totalmente libre :

Código:
' Devuelve el final de una cadena a partir de la primera ocurrencia buscada.
Public Function RightFromString(ByVal wExpression As String, ByVal wFind As String, Optional ByVal wStart As Long = 1) As String
Dim i As Long

    i = InStr(wStart, wExpression, wFind, vbTextCompare)
    If i > 0 Then RightFromString = xRight(wExpression, i + 1)
End Function

' Devuelve el final de una cadena a partir de la última ocurrencia buscada.
Public Function RightFromLastString(ByVal wExpression As String, ByVal wFind As String, Optional ByVal wStart As Long = -1) As String
Dim i As Long

    i = InStrRev(wExpression, wFind, wStart, vbTextCompare)
    If i > 0 Then RightFromLastString = xRight(wExpression, i + 1)
End Function

' Devuelve la subcadena contenida entre el principio de la expresión
'   y la palabra especificada. Devuelve una cadena vacía si la palabra no
'   se encuentra.
Public Function LeftToString(ByVal wExpression As String, ByVal wFind As String, Optional ByVal wStart As Long = 1) As String
Dim i As Long
    
    i = InStr(wStart, wExpression, wFind, vbTextCompare)
    If i > 0 Then LeftToString = Left(wExpression, i - 1)
End Function
Algunas de las funciones necesitan también de estas:
Código:
' Devuelve el final de la cadena que hay en el primer parámetro, a partir de
'   la posición indicada en el segundo parámetro.
Public Function xRight(ByVal String1 As String, ByVal Position As Long) As String
    If InBetween(Position, 1, Len(String1)) Then
        xRight = Right(String1, Len(String1) - Position + 1)
    Else
        xRight = String1
    End If
End Function

' Devuelve si un valor está dentro de un rango. El último
'   parámetro opcional permite forzar que el valor se mantenga dentro
'   de los límites especificados, en cuyo caso siempre devuelve True.
Public Function InBetween(ByRef Value As Long, ByVal Minimum As Long, ByVal Maximum As Long, Optional ForceInRange As Boolean = False) As Boolean
    InBetween = Value >= Minimum And Value <= Maximum
    If (Not InBetween) And ForceInRange Then
        If Value < Minimum Then
            Value = Minimum
        ElseIf Value > Maximum Then
            Value = Maximum
        End If
        InBetween = True
    End If
End Function
(tengo la costumbre de definir los nombres en inglés, porque aprendí con libros en ese idioma, espero que esto no confunda a nadie...)

DjMiki, estas funciones se basan principalmente en el uso de Instr, InstrRev, Left y Right.

Instr te dice la posición en que una cadena se encuentra dentro de otra. Por ejemplo, Instr(1, "Cadena uno", " ", vbTextCompare) devuelve "7", que es la posición del primer espacio, empezando a buscar desde el primer caracter. vbTextCompare es una constante que hace que la comparación de las cadenas sea textual (no distinga mayúsculas de minúsculas). Por defecto es vbBinaryCompare, que sí hace esa distinción:

Código:
    Instr(1, "abcdefg", "DE", vbTextCompare) = 4
    Instr(1, "abcdefg", "DE", vbBinaryCompare) = 0
InstrRev funciona igual, pero busca desde el final de la cadena. Los parámetros cambian de orden, pero significan lo mismo.

Left y Right por su parte devuelven los n primeros caracteres de una cadena, o los n últimos, respectivamente:
Código:
    Left("abcdef", 2) = "ab"
    Right("abcdef", 2) = "ef"
Y por último, xRight es una función que también me hice para mí que devuelve el final de la cadena a partir del caracter que ocupa la posición pedida, inclusive:
Código:
    xRight("abcdef", 2) = "bcdef"
Yo utilizo estas funciones con cierta frecuencia, espero que sean de utilidad o sirvan de inspiración
__________________
wile sona li mute e sona