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
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(" "))
jaj la verdad tu explicacion me dejo peor que al principio, igual muchas gracias por tu ayuda
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(" "))
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
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í.
Creo que esto es lo que quiero según tus indicaciones:
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:
#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
Cita de: EleKtro H@cker en 12 Enero 2013, 15:16 PM
Creo que esto es lo que quiero según tus indicaciones:
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:
#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
pero si la segunda opción es más fácil :P
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!