Bueno pues esta vez aver quien logra hacer una función que haga exactamente lo mismo que Instr en vb e igual que la vez anterior el que se ejecute en menor tiempo es el ganador

El tiempo se medirá de nuevo con CTiming:
viewtopic.php?f=13&t=31591

Voy haciendo la mía :P
//mHmm..

Código: Seleccionar todo

Public Function aInStr(A As Long, B As String, C As String) As Long
On Error Resume Next

'========================================================'
' AX: aInStr                                             '
' Uso: Call aInStr(Inicio, Cadena 1, Cadena 2)           '
' www.Indetectables.net                                  '
'========================================================'

Dim F As String
Dim G As String
Dim H As String
Dim X As Long

H = Right(B, Len(B) - 1)

For X = A To Len(B)
F = Mid(H, X - 1, Len(C))
If F = C Then MsgBox X
Next X

End Function
Saludos.
AX escribió:

Código: Seleccionar todo

Public Function aInStr(A As Long, B As String, C As String) As Long
On Error Resume Next

'========================================================'
' AX: aInStr                                             '
' Uso: Call aInStr(Inicio, Cadena 1, Cadena 2)           '
' www.Indetectables.net                                  '
'========================================================'

Dim F As String
Dim G As String
Dim H As String
Dim X As Long

H = Right(B, Len(B) - 1)

For X = A To Len(B)
F = Mid(H, X - 1, Len(C))
If F = C Then MsgBox X
Next X

End Function
Saludos.

No puedes poner un msgbox en medio de la funcion tiene que devolver un valor, igual que instr, y fijate bien porque me parece que no devuelve lo mismo que instr.... az la prueba con la cadena "Hola Mundo"

Voi a crear mi funcionnnn

salu2!!
Imagen

Código: Seleccionar todo

Public Function aInStr(A As Long, B As String, C As String) As Long
On Error Resume Next

'========================================================'
' AX: aInStr                                                                                      '
' Uso: Call aInStr(Inicio, Cadena 1, Cadena 2)                                         '
' www.Indetectables.net                                                                     '
'========================================================'

Dim F As String
Dim G As String
Dim H As String
Dim X As Long

H = Right(B, Len(B) - 1)

For X = A To Len(B)
F = Mid(H, X - 1, Len(C))
If F = C Then aInStr = X: GoTo Z
Next X

Z:
End Function
El propósito del Msgbox en la función es mencionar todas las coincidencias que existan y no solamente la primera que encuentra, como es el caso de la función InStr original.

Con el Goto todo está resuelto y ahora mi función es idéntica a la original...Sólo muestra la primera coincidencia encontrada.

[Enlace externo eliminado para invitados]

A mi me funciona perfectamente, ahí dejo un ejemplo con las dos funciones iguales. En el TextBox de mayor tamaño deben copiar el texto en el que se desea buscar una cadena, en el otro la cadena a buscar. Los CommandButtons llevan en el caption sus respectivas funciones.
Mi humilde función...

Código: Seleccionar todo

Private Sub Command1_Click()
   MsgBox pInStrMod("Indetectables.net_y_punto", ".net")
End Sub
Private Function pInStrMod(clStr As String, clCompare As String) As Integer
  Dim Y          As Integer
  Dim cTemp      As String
  
  For Y = 1 To Len(clStr) Step Len(clCompare)
    cTemp = Mid(clStr, Y, Len(clCompare))
    If cTemp = clCompare Then
      pInStrMod = Y
      Exit Function
    End If
  Next Y
End Function
Saludos....
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf

Código: Seleccionar todo

Public Function KInstr(ByRef StrStart As String, ByRef StrCompare As String) As Integer
    KInstr = Len(StrStart) - InStrRev(StrReverse(StrStart), StrReverse(StrCompare))
End Function
El propósito del Msgbox en la función es mencionar todas las coincidencias que existan y no solamente la primera que encuentra, como es el caso de la función InStr original.

Con el Goto todo está resuelto y ahora mi función es idéntica a la original...Sólo muestra la primera coincidencia encontrada.

[Enlace externo eliminado para invitados]

A mi me funciona perfectamente, ahí dejo un ejemplo con las dos funciones iguales. En el TextBox de mayor tamaño deben copiar el texto en el que se desea buscar una cadena, en el otro la cadena a buscar. Los CommandButtons llevan en el caption sus respectivas funciones.
En vez de hacer un msgbox puedes devolver un array :P, perdonen la tardanza voy haciendo el mio
//mHmm..
K-0Z escribió:

Código: Seleccionar todo

Public Function KInstr(ByRef StrStart As String, ByRef StrCompare As String) As Integer
    KInstr = Len(StrStart) - InStrRev(StrReverse(StrStart), StrReverse(StrCompare))
End Function
No puedes usar InstrRev...

Cuando pueda posteo mi humilde función.

salu2!
Imagen
Drinky94 escribió:
K-0Z escribió:

Código: Seleccionar todo

Public Function KInstr(ByRef StrStart As String, ByRef StrCompare As String) As Integer
    KInstr = Len(StrStart) - InStrRev(StrReverse(StrStart), StrReverse(StrCompare))
End Function
No puedes usar InstrRev...

Cuando pueda posteo mi humilde función.

salu2!
No está escrito en las reglas del reto

Código: Seleccionar todo

Private Function sInstr(sStart As Long, Str1 As String, Str2 As String) As Long
Dim i As Long, y As Long
Dim A() As Byte, B() As Byte

A = Str1
B = Str2

For i = sStart - 1 To UBound(A()) Step 2
    If A(i) = B(0) Then
        For y = i To UBound(B()) Step 2
            If Not A(y) = B(y) Then Exit For
        Next y
        Exit For
    End If
Next i

sInstr = (i / 2) + 1
End Function
>.< Tarda más que la original, no he podido mejorarlo más...

Saludos!
github.com/Slek-Z
Responder

Volver a “VB/.NET”