Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - krabby

#21
el proyecto que subieron para probar las funciones tiene errores, lo descargue, y algunos resultados no son correctos.
debajo de main donde dice 'raul388 , pasas los parametros incorrectos:

    '' ================ COMPROBACION ===========================
    Debug.Print "============ COMPROBACION ============"
        cFirst = InStr(firstPos, SearchString, SearchChar)
        cSecond = InStr(secondPos, SearchString, SearchChar)
        cThird = InStr(thirdPos, SearchString, SearchChar)
    Debug.Print "Valores de InStr: ", , cFirst, cSecond, cThird
   
    ' Raul338
    tFirst = rInStr(firstPos, SearchChar, SearchString)
    tSecond = rInStr(secondPos, SearchChar, SearchString)
    tThird = rInStr(thirdPos, SearchChar, SearchString)
    If tFirst <> cFirst Or tSecond <> cSecond Or tThird <> cThird Then
        Debug.Print "Raul338 no devuelve los mismos valores", tFirst, tSecond, tThird
    End If
   
    ' Miseryk
    tFirst = myInstr(firstPos, SearchString, SearchChar)
    tSecond = myInstr(secondPos, SearchString, SearchChar)
    tThird = myInstr(thirdPos, SearchString, SearchChar)
    If tFirst <> cFirst Or tSecond <> cSecond Or tThird <> cThird Then
        Debug.Print "Miseryk no devuelve los mismos valores", tFirst, tSecond, tThird
    End If


el orden de parametros de instr y myInstr(de Miseryc) son iguales (firstPos, SearchString, SearchChar),  pero en el de raul338 esta al reves (firstPos, SearchChar, SearchString).
#22
hola super bien el reto que has propuesto Mr Frog., aki mi code, esta comentado, lo probe y no tiene fallas.
si le encuentran una falla me dicen y me lanzo del 5to piso.
usa la misma sintaxis que el instr()

Option Explicit

Public Function Rapidash(Posicion As Long, CadenaDondeBuscar As String, MiCadenaBuscar As String) As Long
   Dim Cadena As String, CadenaBuscar As String
   Cadena = CadenaDondeBuscar
   CadenaBuscar = MiCadenaBuscar
   'si cadena es menor q cadenabuscar, entonces cadenabuscar no esta
   'contenida dentro de cadena
   If Len(Cadena) < Len(CadenaBuscar) Then Exit Function
   'si posicion es mayor a texto, entonces no hay donde buscar
   'porque posicion excede el tamaño de la cadena
   If Posicion > Len(Cadena) Then Exit Function
   'posicion debe ser igual o mayor a1
   If Posicion < 1 Then Exit Function
   'si no hay cadenabuscar salimos
   If Len(CadenaBuscar) = 0 Then Exit Function
   'la cadena serà partida en 2 desde posicion
   'en caso de que posicion sea mayor a 1
   'es para simplificar el trabajo de busqueda
   'extra almacena el tamaño de la primera
   'parte del string partido
   
   Dim Extra As Long
   If Posicion > 1 Then
       'coge la porcion de cadena indicada por Posicion
       'para simplificar la busqueda
       Cadena = Mid(Cadena, Posicion)
       Extra = Posicion - 1
   End If

   Dim arrCad() As String, TamCadenaBuscar As Long, Resul As Long
   TamCadenaBuscar = Len(CadenaBuscar)
   'comprueba si la cadena se encuentra al inicio y le suma
   'lo Extra en caso de que se haya partido la cadena en 2 y sale
   If Left(Cadena, TamCadenaBuscar) = CadenaBuscar Then
       Resul = 1 + Extra
   Else
       'comprueba si la CadenaBuscar existe dentro
       'de cadena
       Dim tmp As String
       tmp = Replace(Cadena, CadenaBuscar, "")
       'si no varia el tamaño kiere decir
       ' q "NO" se encontro CadenaBuscar y sale
       'esto es para no caer en el split
       'y se produzca un error al sumar
       'el len(arrCad(0)), ya q si split falla
       'no habrà el inidce cero "0"
       If Len(tmp) = Len(Cadena) Then
           Exit Function
       End If
       'si llega aki entonces se encontro la CadenaBuscar
       arrCad = Split(Cadena, CadenaBuscar)
       'suma el extra y el tamaño
       'arrCad(0) simpre va contener el string
       'anterior a cadenabuscar, por eso la suma de abajo
       Resul = Len(arrCad(0)) + 1 + Extra
   End If
   
   Rapidash = Resul
End Function


Private Sub Form_Load()
   Dim Pos As Long
   Dim UnaCadena As String
   Dim CadenaBuscar As String
   UnaCadena = "hola que tal viejo, me llamo pepe"
   CadenaBuscar = "viejo"
   Pos = Rapidash(1, UnaCadena, CadenaBuscar)
   MsgBox "Resultado Rapidash: " & Pos
   Pos = InStr(1, UnaCadena, CadenaBuscar)
   MsgBox "Resultado InStr: " & Pos
End Sub


salu2