[SRC] + [Función] Text_Between_Words [by *PsYkE1*]

Iniciado por Psyke1, 31 Mayo 2010, 21:58 PM

0 Miembros y 2 Visitantes están viendo este tema.

Psyke1

#10
Gracias Black! ;-)
Corregire esos detalles... :P
:o
Se puede hacer en una linea!
En cuanto a lo del Msgbox lo hice para que fuera mas grafico, para no meter el resultado de la funcion en una variable... :silbar:
Como me recomiendas ponerlo?¿  :huh:

Salu2!  :)

BlackZeroX

si se puede en una linea lo malo es que se usan variadas veces   Len() o Instr() o X cosa yo pefiero hacerlo una sola vez aun  que sean mas lineas.

Código (vb) [Seleccionar]


Private Function TextoEntreMedio(Texto As String, Palabra1 As String, Palabra2 As String)
   TextoEntreMedio = Left$(Mid$(Texto, InStr(Texto, Palabra1) + Len(Palabra1)), InStr(Mid$(Texto, InStr(Texto, Palabra1) + Len(Palabra1)), Palabra2) - 1)
End Function



y lo del msgbox como dije no metas nada dentro de una funcion a mi personalmente no me convence por que no es DINAMICO.

A se me paso lo del Mid() cuando uses un string usa Mid$() en lugar de Mid() es cuando tomas X texto y lo almacenas en una variable tipo strinmg o similar!¡.

Dulce Infierno Lunar!¡.
The Dark Shadow is my passion.

Psyke1

mmmmmmmm
OK
Porque no es aconsejable utilizar muchas veces  Len() o Instr()??  :huh:
Lo de Mid$() lo sabia, pero se me olvido... :P (ya esta corregido)

Gracias!

seba123neo

por si no te fijaste, la que posteo BlackZeroX▓▓▒▒░░ , ya te la habia puesto en este post:

[Ayuda] Leer texto web

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

BlackZeroX

#14
Cita de: *PsYkE1* en  1 Junio 2010, 00:54 AM
mmmmmmmm
OK
Porque no es aconsejable utilizar muchas veces  Len() o Instr()??  :huh:
Lo de Mid$() lo sabia, pero se me olvido... :P (ya esta corregido)

Gracias!

1er Caso:

Donde 12 +5 se repite una sola vez y se usa su resultado:

Código (vb) [Seleccionar]


Variable1 = 12 + 5
Variable2 = Variable1 + 7 + 2 + Variable1





2do Caso:

Donde (12+5) se repite 3 veces.



Variable1 = (12 + 5) + (12 + 5) + 7 + 2 + (12 + 5)



Ahora imagina que ese (12 + 5) te conlleva 15 segundos:

1er Caso:

Calculo de (12+5 = 15 seg ) + Segundos extras

2do Caso:

Como se repite (12+5) tres veces:

(12+5) = 15 segundos por 3 = 45 segundos + segundos extras

Conclusion: Si puedes almacenar el resultado de una funcion o x dato en una variable será mas optimo por que no se repite el proceso inesesariamente!¡.

En otras Palabras las cosas minimalistas NO SIEMPRE son las mas optimas y adaptables!¡.

P.D.: Como dice Seba123Neo esa funcionla sa que de el post que cito.}

Dulce Infierno Lunar!¡.

The Dark Shadow is my passion.

Psyke1

Cita de: seba123neo en  1 Junio 2010, 03:28 AM
por si no te fijaste, la que posteo BlackZeroX▓▓▒▒░░ , ya te la habia puesto en este post:

[Ayuda] Leer texto web
AJAJAJA :laugh:
No me habia fijado...
Gracias por la explicacion BlackZeroX▓▓▒▒░░! ;)

Salu2!

cobein

Todas las funciones esas tiene un problema de logica.....

Si, por ejemplo, hago una busqueda asi
    Const StrOri As String = "Miguel Angel Ortega Avila"
    Const StrIni As String = "El"
    Const StrFin As String = "el"

el resultado va a ser nulo porque se comienza a buscar desde el principio en ambas ocasiones y en realidad la segunda palabra se tiene que buscar a partir del final de la primera.....


Public Function Entre_Texto(ByRef StrIn As String, ByVal StrIni As String, ByVal StrFin As String, Optional ComparacionEstricta As Boolean) As String
    Dim Pos(1) As Long
    Dim IniPos As Long

    If Len(StrIn) Then
        Pos(0) = InStr(1, StrIn, StrIni, Abs(Not ComparacionEstricta))
        If Pos(0) = 0 Then Exit Function
        IniPos = Pos(0) + Len(StrIni)
        Pos(1) = InStr(IniPos, StrIn, StrFin, Abs(Not ComparacionEstricta))
        If Pos(1) = 0 Then Exit Function
        Entre_Texto = Mid$(StrIn, IniPos, Pos(1) - IniPos)
    End If
End Function

Private Sub Form_Load()
    Const StrOri As String = "Miguel Angel Ortega Avila"
    Const StrIni As String = "El"
    Const StrFin As String = "el"

    'MsgBox Text_Between_Words(StrOri, StrIni, StrFin)
    'MsgBox TextoEntreMedio(StrOri, StrIni, StrFin)

    Debug.Print Entre_Texto(StrOri, StrIni, StrFin, True)
    Debug.Print Entre_Texto(StrOri, StrIni, StrFin, False)
End Sub
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

BlackZeroX

@Cobein

Código (vb) [Seleccionar]


Public Function Entre_Texto(ByRef StrIn As String, ByVal StrIni As String, ByVal StrFin As String, Optional ComparacionEstricta As Boolean) As String
Dim Pos(1) As Long
Dim IniPos As Long
Dim OptionalCompare As VbCompareMethod

   If Len(StrIn) > 0 Then
       If ComparacionEstricta Then
           OptionalCompare = vbBinaryCompare
       Else
           OptionalCompare = vbTextCompare
       End If
       Pos(0) = InStr(1, StrIn, StrIni, OptionalCompare)
       Pos(1) = InStr(1, StrIn, StrFin, OptionalCompare)
       If CBool(Pos(0)) And CBool(Pos(1)) And Pos(0) < Pos(1) Then
           IniPos = Pos(0) + Len(StrIni)
           Entre_Texto = Mid$(StrIn, IniPos, Pos(1) - IniPos)
       End If
   End If
End Function
Public Function Entre_Texto_EditCobein(ByRef StrIn As String, ByVal StrIni As String, ByVal StrFin As String, Optional ComparacionEstricta As Boolean) As String
   Dim Pos(1) As Long
   Dim IniPos As Long

   If Len(StrIn) Then
       Pos(0) = InStr(1, StrIn, StrIni, Abs(Not ComparacionEstricta))
       If Pos(0) = 0 Then Exit Function
       IniPos = Pos(0) + Len(StrIni)
       Pos(1) = InStr(IniPos, StrIn, StrFin, Abs(Not ComparacionEstricta))
       If Pos(1) = 0 Then Exit Function
       Entre_Texto_EditCobein = Mid$(StrIn, IniPos, Pos(1) - IniPos)
   End If
End Function
Private Sub Form_Load()
   Const StrOri As String = "Miguel Angel Ortega Avila"
   Const StrIni As String = "El"
   Const StrFin As String = "el"
   Debug.Print "BlackZeroX"
   Debug.Print "with true """; Entre_Texto(StrOri, StrIni, StrFin, True); """"
   Debug.Print "with false """; Entre_Texto(StrOri, StrIni, StrFin, False); """"
   Debug.Print "Cobein"
   Debug.Print "with true """; Entre_Texto_EditCobein(StrOri, StrIni, StrFin, True); """"
   Debug.Print "with false """; Entre_Texto_EditCobein(StrOri, StrIni, StrFin, False); """"
End Sub



Creo que no viste esta linea!¡.

If CBool(Pos(0)) And CBool(Pos(1)) And Pos(0) < Pos(1) Then

Aunque Cbool() se vea un poco demas solo es para compresion igual se quita.

Dulñce Infierno Lunar!¡.
The Dark Shadow is my passion.

cobein

       
IniPos = Pos(0) + Len(StrIni)
Pos(1) = InStr(IniPos, StrIn, StrFin, Abs(Not ComparacionEstricta))
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

BlackZeroX

#19
ya Sorry xP se me paso ¬¬", aunque igual con la comparacion de aquella linea no deja seguir (y mira que postee el formato en este hilo).

Edito:
Aun asi es un error grave!¡.

Dulce Infierno
The Dark Shadow is my passion.