Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: Psyke1 en 31 Mayo 2010, 21:58 PM

Título: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 31 Mayo 2010, 21:58 PM
ATENCION: SRC CORREGIDO

Hola, aqui os dejo esta funcin que acabo de hacer, no es gran cosa, pero bueno...  :P

Código (vb) [Seleccionar]

' ////////////////////////////////////////////////////////////////
' // *Autor: *PsYkE1* (miguelin.majo@gmail.com)                 //
' // *Podeis agrandar o reducir el codigo, siempre y cuando se  //
' // respete la autoria y se me comuniquen esos cambios.        //
' // *Agradecimientos a BlackZeroX & Cobein                     //
' // *Visita http://foro.rthacker.net                           //
' ////////////////////////////////////////////////////////////////
Option Explicit
Public Function Text_Between_Words(ByVal sTextToAnalyze As String, ByVal sStartWord As String, ByVal sEndWord As String) As String
    Dim iPosition1             As Integer
    Dim iPosition2             As Integer
    Dim iStart                 As Integer
   
    iPosition1 = InStr(sTextToAnalyze, sStartWord)
    If iPosition1 <> 0 Then
        iStart = iPosition1 + Len(sStartWord)
        iPosition2 = InStr(iStart, sTextToAnalyze, sEndWord)
    Else
        Exit Function
    End If
    If iPosition2 <> 0 Then
        Text_Between_Words = Mid$(sTextToAnalyze, iStart, iPosition2 - iStart)
    End If
End Function

Un ejemplo seria asi:

El contexto es el ámbito de referencia de un texto. ¿Qué entiendo por ámbito de referencia?.


Código (vb) [Seleccionar]

   Debug.Print Text_Between_Words(Text1.Text, "referencia", "entiendo")


El resultado seria:
Citar
de un texto. ¿Qué

Y si pongo esto:

Código (vb) [Seleccionar]

   Debug.Print Text_Between_Words(Text1.Text, "referencia", "referencia")


Me sale esto:
Citar
de un texto. ¿Qué entiendo por ámbito de

Espero que os haya gustado(mas aun  :xD)... ;)

Salu2!
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: ssccaann43 © en 31 Mayo 2010, 22:15 PM
Muy bueno *PsYkE1*, me gustó...! ;D
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Elemental Code en 31 Mayo 2010, 22:19 PM
me costo entender como andaba asi que voy a explicarlo otra vez.  :xD

Si en la caja de texto escribo

No entendi el codigo y por eso hago esto

y llamo a la funcion como

Código (vb) [Seleccionar]
MsgBox Text_Between_Words(Text1.Text, "Codigo", "Esto")

me responde:

y por eso hago

Esta bueno pero si lo hiciste vos porque esta en ingles el mensaje de error :S...

Ademas. Para que sirve??

Muy bueno para aprender como usar el instr que no sabia que existia y para practicar pero no entendi del todo para que sirve  ;D ;D

Toda la onda :D
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: ssccaann43 © en 31 Mayo 2010, 22:21 PM
 :-\ Me intrigo eso de que el mensaje esta en ingles...!

*PsYkE1*, no lo tomes a mal, pero detesto a los Copy&Paste...! Espero que esa funcion sea 100% tuya... Sino, tomate este momento para colocar su autor...!  :¬¬
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: ssccaann43 © en 31 Mayo 2010, 22:23 PM
Cita de: Elemental Code en 31 Mayo 2010, 22:19 PM
me costo entender como andaba asi que voy a explicarlo otra vez.  :xD

Si en la caja de texto escribo

No entendi el codigo y por eso hago esto

y llamo a la funcion como

Código (vb) [Seleccionar]
MsgBox Text_Between_Words(Text1.Text, "Codigo", "Esto")

me responde:

y por eso hago

Esta bueno pero si lo hiciste vos porque esta en ingles el mensaje de error :S...

Ademas. Para que sirve??

Muy bueno para aprender como usar el instr que no sabia que existia y para practicar pero no entendi del todo para que sirve  ;D ;D

Toda la onda :D

Por cierto asi es como funciona Elemental, te muestra el texto que contiene una frase entre 2 palabras...!
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 31 Mayo 2010, 22:25 PM
Cita de: ssccaann43 en 31 Mayo 2010, 22:15 PM
Muy bueno *PsYkE1*, me gustó...! ;D
:o
Gracias ssccaann43! ;)

Cita de: Elemental Code en 31 Mayo 2010, 22:19 PM
me costo entender como andaba asi que voy a explicarlo otra vez.  :xD

Si en la caja de texto escribo

No entendi el codigo y por eso hago esto

y llamo a la funcion como

Código (vb) [Seleccionar]
MsgBox Text_Between_Words(Text1.Text, "Codigo", "Esto")

me responde:

y por eso hago

Si, exacto, pero no te olvides de si la palabra lleva minusculas o MAYUSCULAS...

Código (vb) [Seleccionar]
MsgBox Text_Between_Words(Text1.Text, "codigo", "esto")
Cita de: Elemental Code en 31 Mayo 2010, 22:19 PM
Esta bueno pero si lo hiciste vos porque esta en ingles el mensaje de error :S...
Jajaja :laugh:
Pense que quedaria más internacional... :laugh:

Cita de: Elemental Code en 31 Mayo 2010, 22:19 PM
Ademas. Para que sirve??
He posteado porque lo necesitaba para un proyecto que estoy haciendo, y pense que podia ser interesante... :silbar:

Salu2! ;)
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 31 Mayo 2010, 22:28 PM
Cita de: ssccaann43 en 31 Mayo 2010, 22:21 PM
:-\ Me intrigo eso de que el mensaje esta en ingles...!

*PsYkE1*, no lo tomes a mal, pero detesto a los Copy&Paste...! Espero que esa funcion sea 100% tuya... Sino, tomate este momento para colocar su autor...!  :¬¬
Te puedo asegurar que no es C&P ssccaann43... :)
El mensaje lo puse en ingles con el Google traductor... :silbar:
Me desagrada que pienses eso... :-(
Prefiero subir una m**** de code (como ya he hecho en ocasiones) a hacer un C&P...

Salu2!
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: ssccaann43 © en 31 Mayo 2010, 22:38 PM
Bueno, te pedi que no te molestaras ni lo tomes a mal...!

Excelente entonces...! ;D Un saludo...!
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: BlackZeroX en 31 Mayo 2010, 23:42 PM
.
Dejen de decir C&P y opinen ("Eso diria si fuese el autor del hilo...")

Código (vb) [Seleccionar]


Dim pos1 as integer



Es pos1 o pos?

para que no te sucedan estas cosas feas usa al inicio

Código (vb) [Seleccionar]


option explicit



* Lo peor que puedes hacer en una funcion es meterle un msgbox inputbox o X cosa SON ESTORBOS CREEME NO SON DINAMICOS.

Por otra parte...

Aqui esta mi funcion Entre Texto es "Anti-Error".

Código (vb) [Seleccionar]


'
' ////////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel )            //
' //                                                            //
' // Web: http://InfrAngeluX.Sytes.Net/                         //
' //                                                            //
' // |-> Pueden Distribuir Este Codigo siempre y cuando         //
' // no se eliminen los creditos originales de este codigo      //
' // No importando que sea modificado/editado o engrandesido    //
' // o achicado, si es en base a este codigo                    //
' ////////////////////////////////////////////////////////////////
Option Explicit
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



Aqui dejo tres funciones que hacen esactamente lo mismo (Ojo esta igual viene incluida pero corregida por un servidor, incluyo la que yo cree y use desde hace mucho).

Código (vb) [Seleccionar]


Option Explicit

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

Public Function Text_Between_Words(Text As String, String1 As String, String2 As String) As String
    Dim Pos1              As Integer
    Dim Pos2              As Integer
    Dim Start             As Integer
    Dim TotalLen          As Integer
    Pos1 = InStr(Text, String1)
    Pos2 = InStr(Text, String2)
    If Pos1 = 0 Or Pos2 = 0 Then GoTo NoExists
    Start = Pos1 + Len(String1)
    TotalLen = Pos2 - Start
    Text_Between_Words = Mid(Text, Start, TotalLen)
    Exit Function
NoExists:
    MsgBox "Error, check that the two words are in the text, if so," & vbCrLf _
    & " make sure you are entered correctly.", vbCritical
End Function

'
' ////////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel )            //
' //                                                            //
' // Web: http://InfrAngeluX.Sytes.Net/                         //
' //                                                            //
' // |-> Pueden Distribuir Este Codigo siempre y cuando         //
' // no se eliminen los creditos originales de este codigo      //
' // No importando que sea modificado/editado o engrandesido    //
' // o achicado, si es en base a este codigo                    //
' ////////////////////////////////////////////////////////////////
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

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

    MsgBox Text_Between_Words(StrOri, StrIni, StrFin)
    MsgBox TextoEntreMedio(StrOri, StrIni, StrFin)
   
    MsgBox Entre_Texto(StrOri, StrIni, StrFin, True)
    MsgBox Entre_Texto(StrOri, StrIni, StrFin, False)
End Sub



Dulce Infierno Lunar!¡.
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: BlackZeroX en 31 Mayo 2010, 23:46 PM

se me olvido el formato REAL de InStr() es



Function InStr([Start], [String1], [String2], [Compare As VbCompareMethod = vbBinaryCompare])
   Miembro de VBA.Strings
   Devuelve la posición de la primera instancia de una cadena dentro de otra

Function InStrB([Start], [String1], [String2], [Compare As VbCompareMethod = vbBinaryCompare])
   Miembro de VBA.Strings
   Devuelve la posición del byte de la primera instancia de una cadena dentro de otra

Function InStrRev(StringCheck As String, StringMatch As String, [Start As Long = -1], [Compare As VbCompareMethod = vbBinaryCompare]) As Long
   Miembro de VBA.Strings
   Returns the position of the last occurrence of one string within another



Para quien no sepa que funciones existen en vb6 abran el IDE creen o abaran un nuevo proyecto y opriman la fecla [/b]F2

Tamabien se pueden acceder desde el Intelicense escribiendo

VBA.

como si fuese

Me.

Text1.

ETC...



Dulce Infierno Lunar!¡.
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 1 Junio 2010, 00:08 AM
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!  :)
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: BlackZeroX en 1 Junio 2010, 00:48 AM
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!¡.
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: 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!
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: 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 (http://foro.elhacker.net/programacion_visual_basic/ayuda_leer_texto_web-t295026.0.html)

Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: BlackZeroX en 1 Junio 2010, 06:41 AM
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!¡.

Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 1 Junio 2010, 09:01 AM
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 (http://foro.elhacker.net/programacion_visual_basic/ayuda_leer_texto_web-t295026.0.html)
AJAJAJA :laugh:
No me habia fijado...
Gracias por la explicacion BlackZeroX▓▓▒▒░░! ;)

Salu2!
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: cobein en 2 Junio 2010, 05:52 AM
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
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: BlackZeroX en 2 Junio 2010, 06:55 AM
@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!¡.
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: cobein en 2 Junio 2010, 06:57 AM
       
IniPos = Pos(0) + Len(StrIni)
Pos(1) = InStr(IniPos, StrIn, StrFin, Abs(Not ComparacionEstricta))
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: BlackZeroX en 2 Junio 2010, 07:01 AM
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
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: seba123neo en 3 Junio 2010, 02:32 AM
claro, lo unico que yo nunca la usaria para buscar 2 palabras solas como mostro cobein , que se pueden repetir 500 veces en un texto, la usaria para buscar 2 cadenas bien largas e irrepetibles en el texto, como hice en el ejemplo de la web.
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 3 Junio 2010, 11:12 AM
Cita de: seba123neo en  3 Junio 2010, 02:32 AM
claro, lo unico que yo nunca la usaria para buscar 2 palabras solas como mostro cobein , que se pueden repetir 500 veces en un texto, la usaria para buscar 2 cadenas bien largas e irrepetibles en el texto, como hice en el ejemplo de la web.
Si la verdad es que yo tambien cai en eso, pero no le di mucha importancia puesto que Si se repetia la palabra cogia dos como referencia... :silbar:

Salu2! ;)
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 5 Junio 2010, 03:47 AM
Os aviso para que le echeis un vistazo al 1er post de nuevo, he simplificado y corregido la funcion con lo que djio Cobein, ahora funciona perfectamente, espero vuestra opinion... :-*

Salu2! ;)

EDITO:
Corregidme si me equivoco, pero creo que seguimos teniendo un error...
Imaginar que tenemos esto y queremos desde el 1er "el" hasta el que va antes de "balcon":
Citar
el hombre de negro el que estaba en el balcon
Segun lo que hemos hecho, nos daria esto:
Citar
hombre de negro
cuando en realidad queremos esto:
Citar
hombre de negro el que estaba en
¿Os dais cuenta? Mas adelante publico solucion a esto... :P
Salu2!
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: BlackZeroX en 5 Junio 2010, 19:16 PM

no tiene caso ocupar nuevamente instr() si ya lo tienes en la variable pos2 y lo de mid()

Código (Vb) [Seleccionar]


Option Explicit
Public Function Text_Between_Words(Text As String, String1 As String, String2 As String) As String
    Dim Pos1 As Integer, Pos2 As Integer, Start As Integer
    Pos1 = InStr(Text, String1)
    If Pos1 <> 0 Then Start = Pos1 + Len(String1): Pos2 = InStr(Start, Text, String2) Else Exit Function
    If Pos2 <> 0 Then Text_Between_Words = Mid$(Text, Start, Pos2 - Start) Else Exit Function
End Function



Dulce Infierno Lunar!¡.
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 5 Junio 2010, 22:03 PM
Jejejeje, gracias, se me escapo... :silbar:
Tampoco seria necesario el segundo Exit Function... :laugh:

Salu2! ;)
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: cobein en 6 Junio 2010, 07:10 AM
Cita de: seba123neo en  3 Junio 2010, 02:32 AM
claro, lo unico que yo nunca la usaria para buscar 2 palabras solas como mostro cobein , que se pueden repetir 500 veces en un texto, la usaria para buscar 2 cadenas bien largas e irrepetibles en el texto, como hice en el ejemplo de la web.

Entiendo lo que decis pero la funcion plantea una palabra y la que le sigue y el codigo NO hace eso por eso la modificacion.
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: BlackZeroX en 6 Junio 2010, 07:20 AM

Cita de: *PsYkE1* en  5 Junio 2010, 22:03 PM
Jejejeje, gracias, se me escapo... :silbar:
Tampoco seria necesario el segundo Exit Function... :laugh:

Salu2! ;)

Código (vb) [Seleccionar]


Public Function Text_Between_Words(Text As String, String1 As String, String2 As String) As String
    Dim Pos1 As Integer, Pos2 As Integer, Start As Integer
    If Len(Text) > 0 Then
        Pos1 = InStr(1, Text, String1)
        If Pos1 > 0 Then
            Start = Pos1 + Len(String1): Pos2 = InStr(Start, Text, String2)
            If Pos2 > 0 Then Text_Between_Words = Mid$(Text, Start, Pos2 - Start)
        End If
    End If
End Function



Dulce Infierno Lunar!¡.
Título: Re: [SRC] + [Función] Text_Between_Words [by *PsYkE1*]
Publicado por: Psyke1 en 6 Junio 2010, 10:52 AM
Ok, ya lo he corregido... :-*
¿Que opinais de esto que dije?
Cita de: *PsYkE1* en  5 Junio 2010, 03:47 AM
Corregidme si me equivoco, pero creo que seguimos teniendo un error...
Imaginar que tenemos esto y queremos desde el 1er "el" hasta el que va antes de "balcon":
Citar
el hombre de negro el que estaba en el balcon
Segun lo que hemos hecho, nos daria esto:
Citar
hombre de negro
cuando en realidad queremos esto:
Citar
hombre de negro el que estaba en
¿Os dais cuenta? Mas adelante publico solucion a esto... :P
Salu2! ;)