[SRC] Text_Beetwen_Chars [by *PsYkE1*]

Iniciado por Psyke1, 1 Julio 2010, 14:23 PM

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

Psyke1

Hola, se que debo de ser un pesado ya con tanta cadena, pero bueno... :laugh:
Aqui os dejo esta funcion que acabo de hacer, que igual a alguien le es util...

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.        //
' // *Visita http://foro.rthacker.net                           //
' ////////////////////////////////////////////////////////////////

Option Explicit

Public Function Text_Beetwen_Chars(ByVal sStringToAnalyze, ByVal sCharStart, ByVal sCharEnd, _
Optional ByVal bRemoveString As Boolean = True)
   Dim sActualChar          As String * 1
   Dim sPreviousChar        As String * 1
   Dim bFlag                As Boolean
   Dim lToTalLen            As Long
   Dim lToTalChar           As Long
   Dim x                    As Long
   Dim y                    As Long

   lToTalChar = Len(sStringToAnalyze)
   If (lToTalChar > 0) And (sCharStart <> sCharEnd) Then
       For x = 1 To lToTalChar
           If x > 1 Then sPreviousChar = Mid$(sStringToAnalyze, x - 1, 1)
           sActualChar = Mid$(sStringToAnalyze, x, 1)
           lToTalLen = Len(Text_Beetwen_Chars)
           Select Case sActualChar
               Case sCharStart
                   If bFlag = False Then bFlag = True Else y = y + 1
                   If sPreviousChar = Chr$(32) And y = 0 And lToTalLen > 0 Then
                       Text_Beetwen_Chars = Left$(Text_Beetwen_Chars, (lToTalLen - 1))
                   End If
                   If bRemoveString = True Then sActualChar = Chr$(32)
               Case sCharEnd
                   If y = 0 Then bFlag = False Else y = y - 1
                   If bRemoveString = True Then sActualChar = Chr$(32)
           End Select
           If bFlag = bRemoveString And (sActualChar <> sCharStart And sActualChar <> sCharEnd) Then
               Text_Beetwen_Chars = Text_Beetwen_Chars & sActualChar
           End If
       Next x
   End If
End Function


Un ejemplos:

Tengo un texto y quiero omitir todo lo que este entre parentesis...
Código (vb) [Seleccionar]
Private Sub Form_Load()
   Debug.Print Text_Beetwen_Chars("Hola amigos (esto solo es una prueba(jejejeje) ), de este modo veis que funciona...", "(", ")", False)
End Sub


Me devuelve:
CitarHola amigos, de este modo veis que funciona...

Y ahora el caso contrario, supongamos que necesito SOLO el texto que se encuentra entre parentesis:
Código (vb) [Seleccionar]
Private Sub Form_Load()
   Debug.Print Text_Beetwen_Chars("Hola amigos (esto solo es una prueba(jejejeje) ), de este modo veis que funciona...", "(", ")") ' Por defecto bRemoveString es True =)
End Sub


Este es el resultado:
Citaresto solo es una prueba jejejeje

Si me animo un dia de estos la mejorare... :P
Espero que a alguien le sirva!! ;D

Salu2! ;)

ssccaann43 ©

Vaya...! Excelente...! Estoy adjuntando todas esas funciones a mi librería...! Asi me evito el estar creandolas yo...! :silbar: :silbar:
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

Psyke1

Me alegro de que te sirva amigo! ;)
Cita de: ssccaann43 en  1 Julio 2010, 17:33 PM
Asi me evito el estar creandolas yo...! :silbar: :silbar:
jojojojo :laugh:
No sabia que eras tan vago... :silbar: (es broma :xD)

Salu2 y Gracias! :P

ssccaann43 ©

Jajajajaja es cierto...! Prefiero las cosas ya creadas, asi no pierdo tiempo... :silbar:
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

raul338

Cita de: ssccaann43 en  2 Julio 2010, 17:48 PM
Jajajajaja es cierto...! Prefiero las cosas ya creadas, asi no pierdo tiempo... :silbar:

Y con calidad, sino...tiempo perdido x2 :xD

Psyke1

#5
MI Expresion regular para resumir todo esto seria asi:

((\s)?\(.*?\))

PD: Raul tenias razon, es un vicio!! :laugh:

DoEvents¡! :P

Sanlegas

no seria mas facil con replace y split? :rolleyes:

raul338

Cita de: *PsYkE1* en 25 Julio 2010, 21:11 PM
MI Expresion regular para resumir todo esto seria asi:

((\s)?\(.*?\))

PD: Raul tenias razon, es un vicio!! :laugh:

DoEvents¡! :P

Jo! ..... creo q se puede seguir optimizando :P

Cita de: Tenient101 en 25 Julio 2010, 23:58 PM
no seria mas facil con replace y split? :rolleyes:
Hay varias formas, solo que algunas son mas rapidas y otras no :)

Psyke1

Cita de: Tenient101 en 25 Julio 2010, 23:58 PM
no seria mas facil con replace y split? :rolleyes:
Tienes razon ya lo pense asi, pero crei que seria mas rapido de esta manera, no esta comprobado aun, seria cuestion de testear... :P

@Raul
Si, la mejorare  :)

DoEvents¡! :P