Leer Archivo .txt separados por coma – vb.net datatable split

Pregunta:


Por ayuda necesito pasar estas lenas separadas por coma a un datatable.

estas son las lineas. al final de la linea también la separación es una por coma.

000000000000056680640,07/07/2016,1606169715409,000000933.00,DB,EXI IB INFOTEP 501606169715409  RD$.00,409,0000000000000,
000000000000056680640,08/07/2016,0000000000004,000000044.02,DB,PAGO IMPUESTO 0.15  DGII 4 TRANS POR $ 29348.29 Del 01/07/2016 Al 07/07/2016,524,0000000000000,
000000000000056680640,11/07/2016,0000777517509,000007000.00,CR,IB MB desde 777517509 ,201,0000000000000,
000000000000056680640,13/07/2016,0000120000002,000050490.00,CR,DEPOSITO CHEQUE Y EFECTIVO,108,0000120000002,
000000000000056680640,13/07/2016,0160438491157,000008564.40,DB,EXI IB DGII 160438491157  RD$.00,409,0000000000000,
000000000000056680640,13/07/2016,0000000000000,000000075.00,DB,COMISION PAGO IMPUESTO X IB  RD$.00,524,0000000000000,
000000000000056680640,13/07/2016,0003579084854,000001851.27,DB,EXI IB DGII 3579084854  RD$.00,409,0000000000000,

Preguntado por: JOSE ANGEL RAMIREZ HERNANDEZ

jachguate

Generalmente hay un problema con los archivos separados por comas, y es que es un formato que no está estandarizado, y diferentes personas (y sistemas) asumen cosas diferentes en los detalles.

En palabras del artículo Comma-separated values de la Wikipedia en inglés, traducido libremente:

El formato de archivo CSV no está estandarizado. La idea básica de separar campos con una coma es clara, pero esa idea se complica cuando los datos de los campos a su vez contienen comas o, incluso, terminaciones de línea.

Diferentes implementaciones CSV pueden no soportar dichos datos en los campos, o pueden utilizar comillas para encerrar un campo. Las comillas no resuelven todo: Algunos campos podrían contener también comillas, así que ciertas implementaciones CSV podrían incluir caracteres o secuencias de escape.

En general mi recomendación es hacer una implementación robusta en cualquier sistema, lo cuál en el futuro te ahorrará sonrojos y dolores de cabeza. Por fortuna, no tienes por qué escribir el código que se encarga de los detalles.

Puedes basarte, por ejemplo, en la clase TextFieldParser

Un pequeño ejemplo de uso podría ser:

Using MyReader As New Microsoft.VisualBasic.FileIO.
    TextFieldParser("c:logsbigfile")

    MyReader.TextFieldType = 
        Microsoft.VisualBasic.FileIO.FieldType.Delimited
    MyReader.Delimiters = New String() {","}
    MyReader.CommentTokens = New String() {""}
    MyReader.HasFieldsEnclosedInQuotes = True
    Dim currentRow As String()
    'Loop through all of the fields in the file. 
    'If any lines are corrupt, report an error and continue parsing. 
    While Not MyReader.EndOfData
        Try
            currentRow = MyReader.ReadFields()

            Dim newRow = dTable.Rows.Add()
            newRow.ItemArray = currentRow

        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
            MsgBox("Line " & ex.Message & 
            " is invalid.  Skipping")
        End Try
    End While
End Using

Puedes encontrar un ejemplo en la documentación, y es importante saber que por convención un archivo .CSV (Comma separated value) debe tener esta estructura para sea considerado como tal:

a, Elenasys , 12345
b, Ronnie, 12345
c, Doru, 534543
d, Hassan, 6234234
e, Haris K., 78345345

Este sería un ejemplo de como convertir los valores obtenidos de un .csv a DataTable

    Dim lines = IO.File.ReadAllLines("C:patharchivo.csv")
    Dim dTable = New DataTable
    Dim numeroColumnas = lines.First.Split(","c).Length
    For i As Int32 = 1 To numeroColumnas
        'Agrega columnas a DataTable.
        dTable.Columns.Add(New DataColumn("Columna_" & i, GetType(String)))
        Debug.Print("Columna_" & i)
    Next

    '**********************
    For Each line In lines
        Dim objFields = From field In line.Split(","c)
        Dim newRow = dTable.Rows.Add()
        newRow.ItemArray = objFields.ToArray()
        Debug.Print("columna_1: " & objFields.ToArray().GetValue(0).ToString)
        Debug.Print("columna_2: " & objFields.ToArray().GetValue(1).ToString)
        Debug.Print("columna_3: " & objFields.ToArray().GetValue(2).ToString)
    Next

    Debug.Print("finaliza!")

Fuente

Related Posts:

Base de datos access corrupta: “Unrecognized Database Format” – java vb.net ms-access
Pregunta: Buenas! Estoy utilizando Microsoft Access 2007 para hacer mis practicas en casa junto a JAVA y VB.NET. Corri el programa que tenia hecho en VB.NET ...
Referencia a objeto no establecida como instancia de un objeto. Problema con Datatables en C# – c# datatable
Pregunta: ¿Cómo puedo obtener el registro de mi fila seleccionada? Lo que me gustaria es que al seleccionar una fila esta seleccion me regrese el ...
Hacer casting de un tipo desconocido y meterlo en una columna del datarow – c# datatable
Pregunta: Tengo un DataTable que ha sido creado con las mismas columnas que otro DataTable. DataTable dtAux = new DataTable(); for (int i = 0; i < ...
En .NET, ¿existe alguna forma de transformar un archivo SVG en un gráfico PNG? – c# vb.net .net
Pregunta: Los navegadores nos muestran archivos SVG transformándolos en gráficos. La cuestión es dado un archivo SVG -que en realidad es un documento XML-, ¿existe ...
Consulta de fecha sobre BD Access – vb.net fecha ms-access
Pregunta: Información previa: Tengo una base de datos con un campo tipo Fecha/Hora en Access (dd/mm/aa hh:mm:ss). La idea es meter una fecha (introducida en ...
Encontrar números en un texto en xamarin forms – c# xamarin xamarin.forms
Pregunta: Estoy haciendo una app en xamarin que tiene que leer textos de ésta, extraer todos los números y sumarlos, el problema está en cómo ...
Constructor mediante String – java constructor split
Pregunta: Tengo que hacer un constructor en la clase CancionImpl que recibe una cadena con los valores de las propiedades separadas por punto y coma ...
¿Qué hace “palabra.split(” “)” en Python? – python split
Pregunta: Dada la siguiente función no entiendo la línea: ala = palabra.split(" ") Pertenece a este código: def reverse(palabra): p = "" ala = palabra.split(" ") # <--- ...
Leer respuestas web para ver si contienen un texto dado – vb.net
Pregunta: Estoy intentando leer páginas web, por ejemplo me gustaría detectar el string "My server" en la respuesta. He encontrado esto: Dim Str As System.IO.Stream Dim srRead As ...
VB.NET DataGridView cambiar estilo imagen (tile, stretch, center, zoom) – vb.net windows-forms datagrid
Pregunta: Como puedo cambiar en una Picture Cell de un DataGridView, que la imagen se vea en modo tile, stretch, center o zoom? Por defecto me ...
Agregar caracteres a un string en sql – sql sql-server split
Pregunta: Tengo una cadena muy sencilla como la siguiente ' kyo,1,koko,yuyu ' entonces quisiera agregar le a cada palabra comillas simples para obtener algo ...
¿Que Pasa Con Los Valores de Mitades de Pantalla? – vb.net
Pregunta: Por que pasa que los tiempos en dibujar una hipotenusa en pantalla no son los mismos desde la esquina superior izquierda al centro de ...
split separador Javascript – javascript funciones split
Pregunta: Tengo que escribir una función en la que le pase un nombre completo (string) y me devuelva el nombre abreviado (el nombre y la ...
No se ejecuta evento click – html5 ajax vb.net
Pregunta: Estoy tratando de enviar un formulario de una pagina ASPX a AJAX pero no entra a la función del evento click del botón en ...
¿Como crear un contador alfanumerico en vb.net? – vb.net
Pregunta: Buenas tengo una duda en cuanto a al realización de un contador alfanumérico incrementable en visual basic.net alguna idea de como podría hacerse? El formato ...

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *