Tomar texto de un punto a otro en vb.net

Iniciado por <housedir>, 12 Enero 2013, 05:42 AM

0 Miembros y 1 Visitante están viendo este tema.

<housedir>

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
Titulo: Padre nuestro
Padre Nuestro que estás en www.cielo.com
Santificado sea tu server, venga a nosotros tu shareware
Hágase tu downloading así en el http como en el ftp
Danos hoy nuestro surfing de cada día,
Perdona nuestros bugs
como nosotros también perdonamos a Microsoft.
No nos dejes caer en una Mac y líbranos de todo worm.
Enter...

ABDERRAMAH

#1
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

Citarreturn inp.substring(inp.indexof(" "),inp.lastindexof(" ") - inp.indexof(" "))

<housedir>

jaj la verdad tu explicacion me dejo peor que al principio, igual muchas gracias por tu ayuda
Titulo: Padre nuestro
Padre Nuestro que estás en www.cielo.com
Santificado sea tu server, venga a nosotros tu shareware
Hágase tu downloading así en el http como en el ftp
Danos hoy nuestro surfing de cada día,
Perdona nuestros bugs
como nosotros también perdonamos a Microsoft.
No nos dejes caer en una Mac y líbranos de todo worm.
Enter...

ABDERRAMAH

Es fácil, substring devuelve un fragmento desde el primer parámetro y de la longitud del segundo, es decir:

Citarsi 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:

Citarstr = 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:

Citarresultado= str.substring(str.indexof(" ") , str.lastindexof(" ")-str.indexof(" "))

<housedir>

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
Titulo: Padre nuestro
Padre Nuestro que estás en www.cielo.com
Santificado sea tu server, venga a nosotros tu shareware
Hágase tu downloading así en el http como en el ftp
Danos hoy nuestro surfing de cada día,
Perdona nuestros bugs
como nosotros también perdonamos a Microsoft.
No nos dejes caer en una Mac y líbranos de todo worm.
Enter...

ABDERRAMAH

#5
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í.

Eleкtro

#6
Creo que esto es lo que quiero según tus indicaciones:

Código (vbnet) [Seleccionar]
       Dim STR As String = "bienvenidos todos a mi nueva casa de color verde"
       Dim Delimitador_A As String = "todos"
       Dim Delimitador_B As String = "verde"

       STR = Split(STR, Delimitador_A, , CompareMethod.Text)(1) '  Aquí tomo todo lo que hay a la derecha del primer delimitador
       STR = Split(STR, Delimitador_B, , CompareMethod.Text)(0) ' Aquí tomo todo lo que hay a la izquierda del segundo delimitador

       MsgBox(STR) ' a mi nueva casa de color


Saludos!




EDITO:

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

Código (vbnet) [Seleccionar]
#Region " Delimit_String Function "

    ' // By Elektro H@ker
    '
    ' USAGE:
    '
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "todos")) ' a mi nueva casa de color verde
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "todos", "verde")) ' a mi nueva casa de color
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "ToDoS", "VeRDe", True)) ' a mi nueva casa de color
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "ToDoS", "VeRDe", False)) ' False
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "verde", "todos", , "Left")) ' a mi nueva casa de color

    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")
        Dim Compare_Method As Integer = 0 ' Don't ignore case
        If Ignore_Case = True Then Compare_Method = 1 ' Ignore Case

        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

        Try
            If Left_Or_Right.ToUpper = "RIGHT" Then STR = Split(STR, Delimiter_A, , Compare_Method)(1) _
                Else If Left_Or_Right.ToUpper = "LEFT" Then STR = Split(STR, Delimiter_A, , Compare_Method)(0)

            If Delimiter_B IsNot Nothing Then
                If Left_Or_Right.ToUpper = "RIGHT" Then STR = Split(STR, Delimiter_B, , Compare_Method)(0) _
                 Else If Left_Or_Right.ToUpper = "LEFT" Then STR = Split(STR, Delimiter_B, , Compare_Method)(1)
            End If

            Return STR ' Returns the splitted string

        Catch
            Return False ' Returns false if the delimiter "A" or "B" can't be found (Index is out or fange)
        End Try
    End Function

#End Region








<housedir>

Cita de: EleKtro H@cker en 12 Enero 2013, 15:16 PM
Creo que esto es lo que quiero según tus indicaciones:

Código (vbnet) [Seleccionar]
       Dim STR As String = "bienvenidos todos a mi nueva casa de color verde"
       Dim Delimitador_A As String = "todos"
       Dim Delimitador_B As String = "verde"

       STR = Split(STR, Delimitador_A, , CompareMethod.Text)(1) '  Aquí tomo todo lo que hay a la derecha del primer delimitador
       STR = Split(STR, Delimitador_B, , CompareMethod.Text)(0) ' Aquí tomo todo lo que hay a la izquierda del segundo delimitador

       MsgBox(STR) ' a mi nueva casa de color


Saludos!




EDITO:

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

Código (vbnet) [Seleccionar]
#Region " Delimit_String Function "

    ' // By Elektro H@ker
    '
    ' USAGE:
    '
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "todos")) ' a mi nueva casa de color verde
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "todos", "verde")) ' a mi nueva casa de color
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "ToDoS", "VeRDe", True)) ' a mi nueva casa de color
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "ToDoS", "VeRDe", False)) ' False
    ' MsgBox(Delimit_String("Bienvenidos todos a mi nueva casa de color verde", "verde", "todos", , "Left")) ' a mi nueva casa de color

    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")
        Dim Compare_Method As Integer = 0 ' Don't ignore case
        If Ignore_Case = True Then Compare_Method = 1 ' Ignore Case

        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

        Try
            If Left_Or_Right.ToUpper = "RIGHT" Then STR = Split(STR, Delimiter_A, , Compare_Method)(1) _
                Else If Left_Or_Right.ToUpper = "LEFT" Then STR = Split(STR, Delimiter_A, , Compare_Method)(0)

            If Delimiter_B IsNot Nothing Then
                If Left_Or_Right.ToUpper = "RIGHT" Then STR = Split(STR, Delimiter_B, , Compare_Method)(0) _
                 Else If Left_Or_Right.ToUpper = "LEFT" Then STR = Split(STR, Delimiter_B, , Compare_Method)(1)
            End If

            Return STR ' Returns the splitted string

        Catch
            Return False ' Returns false if the delimiter "A" or "B" can't be found (Index is out or fange)
        End Try
    End Function

#End Region


uff me quedo con la primera opción, muchas gracias me funciono :) saludos
Titulo: Padre nuestro
Padre Nuestro que estás en www.cielo.com
Santificado sea tu server, venga a nosotros tu shareware
Hágase tu downloading así en el http como en el ftp
Danos hoy nuestro surfing de cada día,
Perdona nuestros bugs
como nosotros también perdonamos a Microsoft.
No nos dejes caer en una Mac y líbranos de todo worm.
Enter...

Eleкtro

pero si la segunda opción es más fácil :P

Código (vbnet) [Seleccionar]
Dim Tu_String = "Bienvenidos todos a mi nueva casa de color verde"
Dim La_String_Delimitada = Delimit_String(Tu_String , "todos", "verde"))

MSGBOX(La_String_Delimitada)


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

Saludos!