Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: <housedir> en 22 Julio 2013, 07:30 am



Título: 2 delimitadores para obtener texto (vb.net)
Publicado por: <housedir> en 22 Julio 2013, 07:30 am
hola a todos, esto es algo que me parece muy simple pero que vb.net como que lo hace dificil o complicado, ya intente con ubound y lbound pero no logre hacer lo que quiero, lo que deseo es lo siguiente, supongamos que tengo este texto en un textbox:

hola a todos <inicio>bienvenidos[fin] adios

lo que quiero obtener es "bienvenidos", cabe mencionar que el texto "bienvenidos" siempre va a variar, lo unico que siempre sera igual son los delimitadores <inicio> y [fin], saludos y gracias por su ayuda


Título: Re: 2 delimitadores para obtener texto (vb.net)
Publicado por: Eleкtro en 22 Julio 2013, 07:53 am
esto es algo que me parece muy simple pero que vb.net como que lo hace dificil o complicado

Disculpa si me equivoco pero por tu comentario me parece que desconoces una cosa muy importante de la programación, es la forma más idonea de hacerlo y compatible con el 99% de lenguajes,
Son las expresiones regulares:

http://en.wikipedia.org/wiki/Regular_expression
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex%28v=vs.110%29.aspx

Código
  1.        Dim str As String = "hola a todos <inicio>bienvenidos[fin] adios"
  2.        Dim [RegEx] As New System.Text.RegularExpressions.Regex("<inicio>(.*)\[fin\]")
  3.        MsgBox([RegEx].Match(str).Groups(1).ToString)
  4.        ' Result: "bienvenidos"


EDITO:
Los RegEx te sirven para cualquier circunstancia, no recomiendo usar otra forma como por ejemplo replaces o splits o funciones de VB6 como "InStr, Left, Split", pero si quieres algo de eso puedes hacer esto otro:

Código
  1.        Dim str As String = "hola a todos <inicio>bienvenidos[fin] adios"
  2.        Dim delimiter1 As String = "<inicio>", delimiter2 As String = "[fin]"
  3.        MsgBox(Split(Split(str, delimiter1)(1), delimiter2)(0))

Saludos


Título: Re: 2 delimitadores para obtener texto (vb.net)
Publicado por: El Benjo en 22 Julio 2013, 07:57 am
En realidad lo tienes sencillo.

Primero utiliza la función InStr() para obtener la posición donde aparece "<inicio>"
Después vuelva a utilizar esa función para obtener la posición donde aparece "[final]"
Ahora saca la utiliza la función Left() para obtener la cadena desde el primer marcador hasta el segundo. Si no entiendes bien cómo es esto te daré una pista: VariableFinal - VariableInicio
Y por último utiliza la función Replace() para eliminar "<inicio>" y "[final]".


Título: Re: 2 delimitadores para obtener texto (vb.net)
Publicado por: <housedir> en 22 Julio 2013, 08:31 am
Disculpa si me equivoco pero por tu comentario me parece que desconoces una cosa muy importante de la programación, es la forma más idonea de hacerlo y compatible con el 99% de lenguajes,
Son las expresiones regulares:

http://en.wikipedia.org/wiki/Regular_expression
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex%28v=vs.110%29.aspx

Código
  1.        Dim str As String = "hola a todos <inicio>bienvenidos[fin] adios"
  2.        Dim [RegEx] As New System.Text.RegularExpressions.Regex("<inicio>(.*)\[fin\]")
  3.        MsgBox([RegEx].Match(str).Groups(1).ToString)
  4.        ' Result: "bienvenidos"


EDITO:
Los RegEx te sirven para cualquier circunstancia, no recomiendo usar otra forma como por ejemplo replaces o splits o funciones de VB6 como "InStr, Left, Split", pero si quieres algo de eso puedes hacer esto otro:

Código
  1.        Dim str As String = "hola a todos <inicio>bienvenidos[fin] adios"
  2.        Dim delimiter1 As String = "<inicio>", delimiter2 As String = "[fin]"
  3.        MsgBox(Split(Split(str, delimiter1)(1), delimiter2)(0))

Saludos

Muchas gracias por tu ayuda, si las conozco pero se me hace un poco confuso usar las expresiones regulares, en realidad los delimitadores son "<div class="lo que sea">" y "</div>" de un codigo html, quisiera sacar el contenido de ese div pero no se como colocar las expresiones en vb.net


Título: Re: 2 delimitadores para obtener texto (vb.net)
Publicado por: Eleкtro en 22 Julio 2013, 22:13 pm
ahora no estoy delante de la IDE para testear, pero prueba así:

Código
  1. Dim [RegEx] As New System.Text.RegularExpressions.Regex( _
  2. <a><![CDATA[<div class=\"lo que sea\">(.*)<\/div>]]></a>.Value))

...Y matcheas el grupo 1.

Aquí tienes otros ejemplos que te servirán:
http://foro.elhacker.net/net/libreria_de_snippets_posteen_aqui_sus_snippets-t378770.0.html;msg1856865#msg1856865