Cita de: okik en 7 Diciembre 2016, 20:41 PM
Sin embargo con un array obtenido con Split no funciona, me devuelve -1.Código (vbnet) [Seleccionar]Dim Texto As String =
"[Primero]" & Environment.NewLine &
"a" & Environment.NewLine &
"b" & Environment.NewLine &
"c" & Environment.NewLine &
"[Segundo]"
Dim P As New List(Of String)
P.AddRange((Texto.ToString.Trim.Split(CChar(Environment.NewLine))))
MessageBox.Show(CStr(P.IndexOf("[Segundo]")))
MessageBox.Show(CStr(P(4)))
No acabo de entender porqué si al llamarlo con P(4), si que me devuelve el valor.
No te funciona por que el texto que buscas y el que crees que devuelve el índice 4 no es "[Segundo]", sino LINEA VACÍA + "[Segundo]", es decir, lo que haces de forma incorrecta es partir la cadena de texto, puesto que estás añadiendo lineas en blanco, no tiene más misterio ...todas esas soluciones que encontraste usando RegEx y etc. son innecesarias, puesto que el único fallo que tuviste fue no darte cuenta de cual era el problema real.
La solución es muy sencilla, puedes utilizar el overload de la función String.Split() en donde puedes especificar el parámetro StringSplitOptions para eliminar lineas en blanco sobrantes:
Código (vbnet) [Seleccionar]
P.AddRange((Texto.Split({ControlChars.NewLine}, StringSplitOptions.RemoveEmptyEntries)))
Te dejo el ejemplo completo (usando la sintaxis compatible con VB 14):
Código (vbnet) [Seleccionar]
Dim str As String =
"[Primero]
a
b
c
[Segundo]"
Dim strList As New List(Of String)
strList.AddRange((str.Split({ControlChars.CrLf}, StringSplitOptions.RemoveEmptyEntries)))
MessageBox.Show(CStr(strList.IndexOf("[Segundo]")))
MessageBox.Show(String.Format("""{0}""", strList(4)))
Saludos!