none
¿Qué me sugieren para unir cadenas en una sola y luego desglosarla sin que se produzca un error? (explico) RRS feed

  • Pregunta

  • Deseo unir varias cadenas en una, algo así:

    Const Separador As Char = CChr("-")

    Dim cCadenaUnida = cCadena1 & Separador & cCadena2 & cSeparador & cCadena3

    Y luego desglosarla en un array (o en una lista) así:

    Dim aCadenas = cCadenaUnida.Split(Separador)

    ------------------------------------------------------------------------------------------------------

    Lo anterior funciona. El problema es que cCadena1, cCadena2 o cCadena3, podrían contener un caracter igual al definido en Separador y entonces la consideraría como otra cadena, devolviendo mal las cadenas originales.

    La consulta es: ¿Cómo hago lo mismo sin usar un caracter separador para que no se vaya a producir un error si es que alguna de las cadenas contienen dicho caracter?



    • Editado James2016-2 martes, 15 de diciembre de 2020 18:54
    martes, 15 de diciembre de 2020 18:53

Respuestas

  • Hola:
    Prueba esto


            Const Separador = vbCr
            Dim cCadenaUnida = "Hola " & Separador & " Que tal " & Separador & " Muy bien"
            Dim aCadenas = cCadenaUnida.Split(CType(Separador, Char))

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta EricRRModerator miércoles, 16 de diciembre de 2020 16:03
    miércoles, 16 de diciembre de 2020 6:27
  • Hola, entonces yo te recomendaría crear una clase cuyas propiedades sean las columnas de esa tabla. Luego implementar un override del método ToString() para que te devuelva las propiedades con separador. 

    public clases MiTabla
    {
       private const string separador = ";";
       public string Prop1 { get; set; }
       public string Prop2 { get; set; }
    
       public override string ToString()
       {
          return $"{Prop1}{separador}{Prop2}";
       }
    }
    Luego en vez de un array de strings usa array de este tipo


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    • Editado Sergio Parra miércoles, 16 de diciembre de 2020 21:56
    • Marcado como respuesta James2016-2 jueves, 17 de diciembre de 2020 2:07
    miércoles, 16 de diciembre de 2020 21:56

Todas las respuestas

  • Hola:
    ¿ La variable  cCadenaUnida va a tener alguna utilidad ?
    Te lo pregunto porque si la respuesta es no, puedes usar como separador algun codigo ascii que no se usen en las cadenas

    Un saludo desde Bilbo
    Carlos
    martes, 15 de diciembre de 2020 20:08
  • Hola,

    ¿Alguna novedad sobre la consulta realizada?

    Espero su respuesta.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    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.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    martes, 15 de diciembre de 2020 20:23
    Moderador
  • Hola, puedes aplicar String.Join Método

    Define un array de cadenas con tus cCadena y luego puedes aplicar este método.

    Ejempl

    Dim cadenas As String() = New String() { cCadena1, cCadena2, cCadena3 }
    Dim cCadenaUnida As String = String.Join(Separador, cadenas)
    Lo que no entiendo es lo que indicas en tu enunciado, que primero haces la concatenación y luego el Split. Con mi ejemplo en el array cadenas() ya tendrías todas las cadenas separadas

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    • Editado Sergio Parra martes, 15 de diciembre de 2020 23:26
    martes, 15 de diciembre de 2020 23:23
  • Hola:
    ¿ La variable  cCadenaUnida va a tener alguna utilidad ?
    Te lo pregunto porque si la respuesta es no, puedes usar como separador algun codigo ascii que no se usen en las cadenas

    Un saludo desde Bilbo
    Carlos
    Hola, gracias por responder, lo que trato es de unir varias cadenas en una para almacenarla y luego desglosara nuevamente en subcadenas, lo que pasa que con el uso de cualquier caracter, existe la remota posibilidad de que alguna de las subcadenas que la componen contenga dicho caracter y ya no la desglosaría correctamente, por eso descarté esa posibilidad.
    • Editado James2016-2 miércoles, 16 de diciembre de 2020 2:55
    miércoles, 16 de diciembre de 2020 2:22
  • Hola, puedes aplicar String.Join Método

    Define un array de cadenas con tus cCadena y luego puedes aplicar este método.

    Ejempl

    Dim cadenas As String() = New String() { cCadena1, cCadena2, cCadena3 }
    Dim cCadenaUnida As String = String.Join(Separador, cadenas)
    Lo que no entiendo es lo que indicas en tu enunciado, que primero haces la concatenación y luego el Split. Con mi ejemplo en el array cadenas() ya tendrías todas las cadenas separadas

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    Hola, gracias por la respuesta. Lo que pasa que ese conjunto de sub cadenas es parte de un grupo de datos en común, por ejemplo, suponiendo que se trata de una tabla, cada subcadena corresponde a una columna, entonces toda la cadena unida vendría a ser una fila, necesito tener cada fila en una cadena.

    De todos modos voy a probar lo que sugieres, quizá sirva para lo que trato de hacer.

    miércoles, 16 de diciembre de 2020 2:28
  • Hola:
    Prueba esto


            Const Separador = vbCr
            Dim cCadenaUnida = "Hola " & Separador & " Que tal " & Separador & " Muy bien"
            Dim aCadenas = cCadenaUnida.Split(CType(Separador, Char))

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta EricRRModerator miércoles, 16 de diciembre de 2020 16:03
    miércoles, 16 de diciembre de 2020 6:27
  • Hola, entonces yo te recomendaría crear una clase cuyas propiedades sean las columnas de esa tabla. Luego implementar un override del método ToString() para que te devuelva las propiedades con separador. 

    public clases MiTabla
    {
       private const string separador = ";";
       public string Prop1 { get; set; }
       public string Prop2 { get; set; }
    
       public override string ToString()
       {
          return $"{Prop1}{separador}{Prop2}";
       }
    }
    Luego en vez de un array de strings usa array de este tipo


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    • Editado Sergio Parra miércoles, 16 de diciembre de 2020 21:56
    • Marcado como respuesta James2016-2 jueves, 17 de diciembre de 2020 2:07
    miércoles, 16 de diciembre de 2020 21:56