none
RECORRER UN STRING Y PARTIRLO EN DOS STRING CUANDO ENCUENTRE UNA VOCAL RRS feed

  • 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

    martes, 5 de abril de 2016 13:20

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.


    martes, 5 de abril de 2016 13:45
  • 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!!!


    martes, 5 de abril de 2016 15:56
  • 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

    martes, 5 de abril de 2016 16:38

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 &quot;Marcar como respuesta&quot; 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 &quot;tal cual&quot; y no implica ninguna responsabilidad de parte de Microsoft.


    martes, 5 de abril de 2016 13:45
  • 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!!!


    martes, 5 de abril de 2016 15:56
  • 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

    martes, 5 de abril de 2016 16:38
  • 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 ..

    viernes, 8 de abril de 2016 12:39