Visual Basic.NET - split vb.net

 
Vista:
sin imagen de perfil

split vb.net

Publicado por Leonardo (7 intervenciones) el 24/07/2021 09:45:26
Hola a todos, tengo el siguiente problema. Necesito pasar un csv a un datagirdview pero tengo problemas con el delimitador. El csv contiene lo siguiente

"Nro","nombre","animal"
"1","Pepe","perro,gato"
"2","Hugo","tigre,león,cebra"

Y quiero que muestre esto en el datagirdview

Nro Nombre Animal
1 Pepe Perro, gato
2 Hugo. Tigre, león, cebra

Ojalá puedan ayudarme por favor, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

split vb.net

Publicado por Phil Rob (1554 intervenciones) el 24/07/2021 21:40:56
Hola,

Mira la instrucción String.Split. Debería funcionar con String.Split(",","""") para dar una tabla con los datos sin " ni , .
A testar....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

split vb.net

Publicado por Leonardo (7 intervenciones) el 25/07/2021 01:00:14
gracias Phil rob por tu pronta respuesta, realice lo que indicas pero me aparece el siguiente error, adjunto imagen

saludos
Captura-de-pantalla-2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

split vb.net

Publicado por Leonardo (7 intervenciones) el 25/07/2021 01:51:14
intente esto, pero el resultado no fue lo que necesito, adjunto imagen para que puedan entender, gracias

Split(New [Char]() {CChar(","), CChar("""")})

ejemplo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

split vb.net

Publicado por Phil Rob (1554 intervenciones) el 25/07/2021 08:33:41
Hola,

Este es el código que vengo de testar. Debería dar los resultados que quieras.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Tratar()
        Dim FicheroALeer = New System.IO.StreamReader("D:\Tmp\TestSplit\FicheroDatos.txt", System.Text.Encoding.Default, True)
        Dim Separador As Char() = """"
        Dim LineaLeida As String
        Dim DatosTMP() As String
 
        Do Until FicheroALeer.Peek = -1
            LineaLeida = FicheroALeer.ReadLine
            DatosTMP = LineaLeida.Split(Separador)
            For Indicio As Integer = 0 To DatosTMP.Length - 1
                DatosTMP(Indicio) = DatosTMP(Indicio).Trim("""").Trim(",")
                If Not DatosTMP(Indicio) = String.Empty Then
 
                    ' Aqui es la cadena que quieras
                    ' ...
 
                End If
            Next
        Loop
 
        FicheroALeer.Close()
        FicheroALeer.Dispose()
    End Sub
End Class

Que tenga un buen día ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

split vb.net

Publicado por Leonardo (7 intervenciones) el 26/07/2021 21:52:41
ejemplo

ese es el resultado con lo ultimo que me enviaste
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

split vb.net

Publicado por Phil Rob (1554 intervenciones) el 26/07/2021 22:39:16
Pienso que no has bien copiar mi código, falla el .Trim(",").
Si no tengo razón, envia me tu fichero de texto, ajustare mi código.
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

split vb.net

Publicado por Leonardo (7 intervenciones) el 26/07/2021 23:11:16
codigo
resultado

adjunto imágenes del código y el resultado, como puedes ver me arroja muchas veces el titulo de las columnas y también los datos salen repetidos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

split vb.net

Publicado por Phil Rob (1554 intervenciones) el 26/07/2021 23:24:58
Veo que tu código parece bien como el mío.
En este caso, envias me una partiale del fichero csv o tu proyecto completo. Puedes enviar por correo privado si te gusta.
Adjunto el fichero texto que he utilizado para testar. Este es una copia del ejemplo que das en tu primero mensaje. Verifica que tu programa funciona con lo.

Miraré mañana con este que envias.


Buenas noches ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

split vb.net

Publicado por Phil Rob (1554 intervenciones) el 27/07/2021 08:32:41
Hola,

La noche da buenas ideas ...

He comprendido porque no obtengas el mismo resultado que me.

Con "If Not DatosTmp(Indicio) = String.Empty Then ...", selecciono solamente los valores que no están vacíos.
Cuando escribes "dgProvi.Rows.Add(DatosTmp)", seleccionas todos valores sin diferencia entre vacía o no.

He cambiado el algoritmo para dar los resultados que quieras.
Adjunto el fichero TestSplit.Zip con mi proyecto completo para ti testar (no olvidas cambiar la ruta del fichero csv).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Sub Tratar()
        Dim FicheroALeer = New System.IO.StreamReader("D:\Tmp\TestSplit\FicheroDatos.txt", System.Text.Encoding.Default, True)
        Dim Separador As Char() = """"
        Dim LineaLeida As String
        Dim DatosTMP() As String
 
        Do Until FicheroALeer.Peek = -1
            LineaLeida = FicheroALeer.ReadLine
            DatosTMP = LineaLeida.Split(Separador)
 
            dgProvi.ColumnCount = DatosTMP.Length - 1
 
            For Indicio As Integer = 0 To DatosTMP.Length - 1
                DatosTMP(Indicio) = DatosTMP(Indicio).Trim("""").Trim(",")
                SuprimirColumnaVacia(DatosTMP, Indicio)  ' Solamente si lo quieras
            Next
            dgProvi.Rows.Add(DatosTMP)
 
        Loop
 
        FicheroALeer.Close()
        FicheroALeer.Dispose()
    End Sub
 
    Private Sub SuprimirColumnaVacia(ByRef DT() As String, ByVal Indicio As Integer)
        Dim DTLen As Integer = DT.Length
        For I As Integer = Indicio To DTLen - 2
            DT(I) = DT(I + 1)
        Next
        ReDim Preserve DT(DTLen - 1)
    End Sub

Que tenga un buen día ...

dgP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Giancarlo
Val: 377
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

split vb.net

Publicado por Giancarlo (488 intervenciones) el 29/07/2021 06:49:07
y si en lugar de usar trim("""") usas replace("""", "")

además que podrías delimitar la cantidad de columnas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

split vb.net

Publicado por Leonardo (7 intervenciones) el 29/07/2021 06:52:33
lo probare y te cuento, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

split vb.net

Publicado por Leonardo (7 intervenciones) el 01/08/2021 13:25:51
Funciona Perfecto muchas Gracias!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar