Principales respuestas
RECORRER UN STRING Y PARTIRLO EN DOS STRING CUANDO ENCUENTRE UNA VOCAL

Pregunta
-
Buenas tardes caballeros.
Me ando en la tesitura de recorrer un string, y donde lea un caracter alfanumerico, cortar el string en dos. Llevo ya un buen rato sin suerte. Os pongo en antecedentes, estoy tratando de enviar un GS1-128 a una máquina que imprimirá codigos de barras en ese formato, la línea que da el SAP es asi:
(01)78410205054868(15)191231(10)A12345
Con una función replace, le quito los parentesis.
La trama que yo le tengo que mandar a la impresora, depende de varios factores. El primero va en funcion de si hay alfanumerico en la trama y si lo hay,(como en el ejemplo, que tenemos una A) cortar la trama en dos Subtramas.
Luego ya tengo que sumar los caracteres de la subtrama1
- Si esta suma es par, la cabeza comienza con >I>F + Subtrama 1 hasta llegar al alfanumerico
>I>F0178410205054868151912311011>DA
Entonces marco el alfanumérico con >D
- Si esta suma es impar, la cabeza comienza con >H>F + el primer caracter de la subtrama, seguido de >C y el resto de la subtrama hasta llegar al alfanumerico y marcarlo como en el ejemplo de arriba.
>H>F0>C178410205054868151912311011>DA
Pero no se de que forma puedo recorrer el String para localizar el alfanumerico y cortar justo delante de el el String en dos Substring
Respuestas
-
Fijate de usar un regex https://msdn.microsoft.com/en-us/library/4edbef7e(v=vs.110).aspx?f=255&MSPPError=-2147217396&cs-save-lang=1&cs-lang=csharp#code-snippet-1
hay te paso un ejemplo.
la otra es que podes transformar a char el string y validar si es un char alfabetico y mandas el resto del string a la funcion.
Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
- Editado Federico Hansen martes, 5 de abril de 2016 13:48
- Marcado como respuesta Enrique M. MontejoModerator viernes, 8 de abril de 2016 6:11
-
Hola:
Podrías usar el IndexOf para obtener el indice de ubicación del carácter deseado.
Public Module Example Public Sub Main() Dim str As String = "animal" Dim toFind As String = "n" Dim index As Integer = str.IndexOf("n") Console.WriteLine("Found '{0}' in '{1}' at position {2}", toFind, str, index) End Sub End Module ' The example displays the following output: ' Found 'n' in 'animal' at position 1
Una vez obtenido el indice de la posición puedes usar el Substring el cual le pasarías como valor inicial el indice recuperado mas 1 y como valor final la longitud de tu cadena, con esto obtendrías los valores que existen después de la aparición del carácter buscado. Para obtener la primer parte solo usas el Substring pero le pasarías como primer parámetro un 0 y como segundo parámetro el indice recuperado con el IndexOf y listo, ahí tendrías las dos partes.
Ejemplo substring:
Module Example Public Sub Main() Dim s As String = "aaaaabbbcccccccdd" Dim charRange As Char = "b"c Dim startIndex As Integer = s.Indexof(charRange) Dim endIndex As Integer = s.LastIndexOf(charRange) Dim length = endIndex - startIndex + 1 Console.WriteLine("{0}.Substring({1}, {2}) = {3}", s, startIndex, length, s.Substring(startIndex, length)) End Sub End Module ' The example displays the following output: ' aaaaabbbcccccccdd.Substring(5, 3) = bbb
Espero te sea de utilidad.
Saludos desde Monterrey, Nuevo León, México!!!
- Editado JoséLuisGarcía martes, 5 de abril de 2016 15:57
- Marcado como respuesta Enrique M. MontejoModerator viernes, 8 de abril de 2016 6:11
-
Hola,
[-] Me ando en la tesitura de recorrer un string, y donde lea un carácter alfanumérico, cortar el string en dos.
Mencionas que deseas cortar el string en 2, entonces tu cadena solo tendrá un carácter alfanumérico??, porque si es así solo es cuestión de buscar en la cadena que valor no es numérico, y guardarlo en una variable.
Dim texto As String = TextBox1.Text Dim letra As String = String.Empty Dim regex As Regex = New Regex("^\d+$") For indice = 0 To texto.Length - 1 Dim match As Match = regex.Match(texto.Substring(indice, 1)) If Not match.Success Then 'Encontramos el alfanumerico letra = texto.Substring(indice, 1) 'Salimos Exit For End If Next If letra <> String.Empty Then Dim resultado() As String = texto.Split(letra) TextBox2.Text = resultado(0) & Environment.NewLine & resultado(1) End If
NOTA : Pero si en tu cadena recibes más de un carácter alfanumérico, ya no sería una variable, sino una lista, y tendrías que guardar las posiciones en donde encuentra los caracteres, y al final con IndexOf, obtienes los datos, particionando por SubString().
Saludos.
JC NaupaCrispín
- Marcado como respuesta Enrique M. MontejoModerator viernes, 8 de abril de 2016 6:11
Todas las respuestas
-
Fijate de usar un regex https://msdn.microsoft.com/en-us/library/4edbef7e(v=vs.110).aspx?f=255&MSPPError=-2147217396&cs-save-lang=1&cs-lang=csharp#code-snippet-1
hay te paso un ejemplo.
la otra es que podes transformar a char el string y validar si es un char alfabetico y mandas el resto del string a la funcion.
Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
- Editado Federico Hansen martes, 5 de abril de 2016 13:48
- Marcado como respuesta Enrique M. MontejoModerator viernes, 8 de abril de 2016 6:11
-
Hola:
Podrías usar el IndexOf para obtener el indice de ubicación del carácter deseado.
Public Module Example Public Sub Main() Dim str As String = "animal" Dim toFind As String = "n" Dim index As Integer = str.IndexOf("n") Console.WriteLine("Found '{0}' in '{1}' at position {2}", toFind, str, index) End Sub End Module ' The example displays the following output: ' Found 'n' in 'animal' at position 1
Una vez obtenido el indice de la posición puedes usar el Substring el cual le pasarías como valor inicial el indice recuperado mas 1 y como valor final la longitud de tu cadena, con esto obtendrías los valores que existen después de la aparición del carácter buscado. Para obtener la primer parte solo usas el Substring pero le pasarías como primer parámetro un 0 y como segundo parámetro el indice recuperado con el IndexOf y listo, ahí tendrías las dos partes.
Ejemplo substring:
Module Example Public Sub Main() Dim s As String = "aaaaabbbcccccccdd" Dim charRange As Char = "b"c Dim startIndex As Integer = s.Indexof(charRange) Dim endIndex As Integer = s.LastIndexOf(charRange) Dim length = endIndex - startIndex + 1 Console.WriteLine("{0}.Substring({1}, {2}) = {3}", s, startIndex, length, s.Substring(startIndex, length)) End Sub End Module ' The example displays the following output: ' aaaaabbbcccccccdd.Substring(5, 3) = bbb
Espero te sea de utilidad.
Saludos desde Monterrey, Nuevo León, México!!!
- Editado JoséLuisGarcía martes, 5 de abril de 2016 15:57
- Marcado como respuesta Enrique M. MontejoModerator viernes, 8 de abril de 2016 6:11
-
Hola,
[-] Me ando en la tesitura de recorrer un string, y donde lea un carácter alfanumérico, cortar el string en dos.
Mencionas que deseas cortar el string en 2, entonces tu cadena solo tendrá un carácter alfanumérico??, porque si es así solo es cuestión de buscar en la cadena que valor no es numérico, y guardarlo en una variable.
Dim texto As String = TextBox1.Text Dim letra As String = String.Empty Dim regex As Regex = New Regex("^\d+$") For indice = 0 To texto.Length - 1 Dim match As Match = regex.Match(texto.Substring(indice, 1)) If Not match.Success Then 'Encontramos el alfanumerico letra = texto.Substring(indice, 1) 'Salimos Exit For End If Next If letra <> String.Empty Then Dim resultado() As String = texto.Split(letra) TextBox2.Text = resultado(0) & Environment.NewLine & resultado(1) End If
NOTA : Pero si en tu cadena recibes más de un carácter alfanumérico, ya no sería una variable, sino una lista, y tendrías que guardar las posiciones en donde encuentra los caracteres, y al final con IndexOf, obtienes los datos, particionando por SubString().
Saludos.
JC NaupaCrispín
- Marcado como respuesta Enrique M. MontejoModerator viernes, 8 de abril de 2016 6:11
-
Gracias compañero. Lo solventé con un split. Hice un SPlit para cada una de las posibles vocales, ya, lo sé .... Funcionó al menos.
Ahora ando en como crear un array desde un string, subir cada uno de los digitos al String, y desde ahí, evaluar si es alfanumerico o numero, para luego evaluar cuantos tengo juntos. Es un codigo ean 128 y su interpretación ..