Página 1 de 1

[RETO] Funcion Instr de vb en vb

Publicado: 13 Abr 2011, 17:27
por linkgl
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

Re: [RETO] Funcion Instr de vb en vb

Publicado: 13 Abr 2011, 19:07
por AX

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.

Re: [RETO] Funcion Instr de vb en vb

Publicado: 13 Abr 2011, 20:10
por mDrinky
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!!

Re: [RETO] Funcion Instr de vb en vb

Publicado: 13 Abr 2011, 20:51
por AX

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.

Re: [RETO] Funcion Instr de vb en vb

Publicado: 17 Abr 2011, 17:33
por p0is0n-123
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....

Re: [RETO] Funcion Instr de vb en vb

Publicado: 19 Abr 2011, 04:23
por K-0Z

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

Re: [RETO] Funcion Instr de vb en vb

Publicado: 19 Abr 2011, 05:43
por linkgl
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

Re: [RETO] Funcion Instr de vb en vb

Publicado: 19 Abr 2011, 19:28
por mDrinky
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!

Re: [RETO] Funcion Instr de vb en vb

Publicado: 20 Abr 2011, 17:17
por K-0Z
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

Re: [RETO] Funcion Instr de vb en vb

Publicado: 21 Abr 2011, 11:21
por mDrinky
No lo pone en las reglas porque es de cajon de madera de pino eso

Re: [RETO] Funcion Instr de vb en vb

Publicado: 25 Abr 2011, 17:31
por Slek

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!