Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: <housedir> en 12 Enero 2013, 05:42 am



Título: Tomar texto de un punto a otro en vb.net
Publicado por: <housedir> en 12 Enero 2013, 05:42 am
Hola a todos, pues quisiera saber como puedo tomar un texto desde un punto a otro, por ejemplo:

"la casa de al lado es de color verde"

y quisiera tomar solo el texto que esta entre "la" y "verde"

y me quede asi:

"casa de al lado es de color"

ya intente con split y lbound ubound pero no me ha funcionado


Título: Re: Tomar texto de un punto a otro en vb.net
Publicado por: ABDERRAMAH en 12 Enero 2013, 05:55 am
lo más sencillo será hacer dos pasadas, en la primera seleccionamos la primera parte y en la segunda la última.

Citar
   
Public Function firstandlast_word_of(ByVal inp As String) As String()
        Dim resultado(2) As String

        if inp.contains(" ") then
           resultado(0) = inp.Substring(0, inp.IndexOf(" "))
           resultado(1) = inp.Substring(inp.LastIndexOf(" "))
        end if
        
        Return resultado
End Function

substring(start, lng) devuelve el fragmento que comienza en start y tiene como longitud lng, así que como vamos a recoger desde el principio podemos usar indexof(" ") para saber dónde se encuentra la posición del primer espacio y usarlo como longitud (si el espacio está en la posición de base 0 número 5 devuelve desde 0 hasta 5).
El otro substring sólo tiene un parámetro, que es start, devolverá desde start hasta el final. ahora usamos lastindexof(" ") para encontrar el último espacio y devolver desde ahí hasta el final.

edit: oh, my god, ahora lo veo y lo entendí al revés, de todas formas creo que con substring, indexof y lastindexof no es complicado

Citar
return inp.substring(inp.indexof(" "),inp.lastindexof(" ") - inp.indexof(" "))


Título: Re: Tomar texto de un punto a otro en vb.net
Publicado por: <housedir> en 12 Enero 2013, 06:03 am
jaj la verdad tu explicacion me dejo peor que al principio, igual muchas gracias por tu ayuda


Título: Re: Tomar texto de un punto a otro en vb.net
Publicado por: ABDERRAMAH en 12 Enero 2013, 06:10 am
Es fácil, substring devuelve un fragmento desde el primer parámetro y de la longitud del segundo, es decir:

Citar
si tengo 

dim str as string=hola mundo

str.substring(1,6)=ola mu

o sea, un texto de 6 caracteres que comienza en el 1 (empieza en cero). Por eso lo que tu necesitas es un fragmento que va desde el primer espacio y es, aquí viene lo complicado, tan largo como la posición del último espacio menos la del primero... piensalo:

Citar
str = hola que tal estas

la posición del primer espacio es 4, la del último es 12, 12-4=8, así que empieza en 4 y tiene 8 letras de largo, por eso hago:

Citar
resultado= str.substring(str.indexof(" ") , str.lastindexof(" ")-str.indexof(" "))


Título: Re: Tomar texto de un punto a otro en vb.net
Publicado por: <housedir> en 12 Enero 2013, 06:17 am
si amigo, lo que no me entendiste es que necesito como identificador la palabra no el espacio donde esta, para dejarlo mas claro, supongamos que tengo el siguiente texto:

"bienvenidos todos a mi nueva casa de color verde"

y solo quiero extraer el texto que esta entre "todos" y "color" me quedaría

" a mi nueva casa de "

nose si me explique bien, saludos


Título: Re: Tomar texto de un punto a otro en vb.net
Publicado por: ABDERRAMAH en 12 Enero 2013, 06:26 am
Si, lo que te he explicado antes hace exáctamente eso pero usando espacios como separador,pero bueno pones str.indexof("loquesea") y te lo corta por ahí.


Título: Re: Tomar texto de un punto a otro en vb.net
Publicado por: Eleкtro en 12 Enero 2013, 15:16 pm
Creo que esto es lo que quiero según tus indicaciones:

Código
  1.        Dim STR As String = "bienvenidos todos a mi nueva casa de color verde"
  2.        Dim Delimitador_A As String = "todos"
  3.        Dim Delimitador_B As String = "verde"
  4.  
  5.        STR = Split(STR, Delimitador_A, , CompareMethod.Text)(1) '  Aquí tomo todo lo que hay a la derecha del primer delimitador
  6.        STR = Split(STR, Delimitador_B, , CompareMethod.Text)(0) ' Aquí tomo todo lo que hay a la izquierda del segundo delimitador
  7.  
  8.        MsgBox(STR) ' a mi nueva casa de color

Saludos!



EDITO:

Te lo voy a poner más fácil:

Código
  1. #Region " Delimit_String Function "
  2.  
  3.    ' // By Elektro H@ker
  4.    '
  5.    ' USAGE:
  6.    '
  7.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "todos")) ' a mi nueva casa de color verde
  8.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "todos", "verde")) ' a mi nueva casa de color
  9.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "ToDoS", "VeRDe", True)) ' a mi nueva casa de color
  10.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "ToDoS", "VeRDe", False)) ' False
  11.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "verde", "todos", , "Left")) ' a mi nueva casa de color
  12.  
  13.    Private Function Delimit_String(ByVal STR As String, ByVal Delimiter_A As String, Optional ByVal Delimiter_B As String = Nothing, Optional ByVal Ignore_Case As Boolean = False, Optional ByVal Left_Or_Right As String = "Right")
  14.        Dim Compare_Method As Integer = 0 ' Don't ignore case
  15.        If Ignore_Case = True Then Compare_Method = 1 ' Ignore Case
  16.  
  17.        If Not Left_Or_Right.ToUpper = "LEFT" And Not Left_Or_Right.ToUpper = "RIGHT" Then Return False ' Returns false if the Left_Or_Right argument is in incorrect format
  18.  
  19.        Try
  20.            If Left_Or_Right.ToUpper = "RIGHT" Then STR = Split(STR, Delimiter_A, , Compare_Method)(1) _
  21.                Else If Left_Or_Right.ToUpper = "LEFT" Then STR = Split(STR, Delimiter_A, , Compare_Method)(0)
  22.  
  23.            If Delimiter_B IsNot Nothing Then
  24.                If Left_Or_Right.ToUpper = "RIGHT" Then STR = Split(STR, Delimiter_B, , Compare_Method)(0) _
  25.                 Else If Left_Or_Right.ToUpper = "LEFT" Then STR = Split(STR, Delimiter_B, , Compare_Method)(1)
  26.            End If
  27.  
  28.            Return STR ' Returns the splitted string
  29.  
  30.        Catch
  31.            Return False ' Returns false if the delimiter "A" or "B" can't be found (Index is out or fange)
  32.        End Try
  33.    End Function
  34.  
  35. #End Region


Título: Re: Tomar texto de un punto a otro en vb.net
Publicado por: <housedir> en 12 Enero 2013, 16:25 pm
Creo que esto es lo que quiero según tus indicaciones:

Código
  1.        Dim STR As String = "bienvenidos todos a mi nueva casa de color verde"
  2.        Dim Delimitador_A As String = "todos"
  3.        Dim Delimitador_B As String = "verde"
  4.  
  5.        STR = Split(STR, Delimitador_A, , CompareMethod.Text)(1) '  Aquí tomo todo lo que hay a la derecha del primer delimitador
  6.        STR = Split(STR, Delimitador_B, , CompareMethod.Text)(0) ' Aquí tomo todo lo que hay a la izquierda del segundo delimitador
  7.  
  8.        MsgBox(STR) ' a mi nueva casa de color

Saludos!



EDITO:

Te lo voy a poner más fácil:

Código
  1. #Region " Delimit_String Function "
  2.  
  3.    ' // By Elektro H@ker
  4.    '
  5.    ' USAGE:
  6.    '
  7.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "todos")) ' a mi nueva casa de color verde
  8.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "todos", "verde")) ' a mi nueva casa de color
  9.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "ToDoS", "VeRDe", True)) ' a mi nueva casa de color
  10.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "ToDoS", "VeRDe", False)) ' False
  11.    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "verde", "todos", , "Left")) ' a mi nueva casa de color
  12.  
  13.    Private Function Delimit_String(ByVal STR As String, ByVal Delimiter_A As String, Optional ByVal Delimiter_B As String = Nothing, Optional ByVal Ignore_Case As Boolean = False, Optional ByVal Left_Or_Right As String = "Right")
  14.        Dim Compare_Method As Integer = 0 ' Don't ignore case
  15.        If Ignore_Case = True Then Compare_Method = 1 ' Ignore Case
  16.  
  17.        If Not Left_Or_Right.ToUpper = "LEFT" And Not Left_Or_Right.ToUpper = "RIGHT" Then Return False ' Returns false if the Left_Or_Right argument is in incorrect format
  18.  
  19.        Try
  20.            If Left_Or_Right.ToUpper = "RIGHT" Then STR = Split(STR, Delimiter_A, , Compare_Method)(1) _
  21.                Else If Left_Or_Right.ToUpper = "LEFT" Then STR = Split(STR, Delimiter_A, , Compare_Method)(0)
  22.  
  23.            If Delimiter_B IsNot Nothing Then
  24.                If Left_Or_Right.ToUpper = "RIGHT" Then STR = Split(STR, Delimiter_B, , Compare_Method)(0) _
  25.                 Else If Left_Or_Right.ToUpper = "LEFT" Then STR = Split(STR, Delimiter_B, , Compare_Method)(1)
  26.            End If
  27.  
  28.            Return STR ' Returns the splitted string
  29.  
  30.        Catch
  31.            Return False ' Returns false if the delimiter "A" or "B" can't be found (Index is out or fange)
  32.        End Try
  33.    End Function
  34.  
  35. #End Region

uff me quedo con la primera opción, muchas gracias me funciono :) saludos


Título: Re: Tomar texto de un punto a otro en vb.net
Publicado por: Eleкtro en 12 Enero 2013, 16:39 pm
pero si la segunda opción es más fácil :P

Código
  1. Dim Tu_String = "Bienvenidos todos a mi nueva casa de color verde"
  2. Dim La_String_Delimitada = Delimit_String(Tu_String , "todos", "verde"))
  3.  
  4. MSGBOX(La_String_Delimitada)

Séa como séa me alegro de que te haya servido,

Saludos!