none
Input string was not in a correct format CSV RRS feed

  • Pregunta

  • Buen dia foro.

    Veran tengo un problema al importar un archivo CSV a un datatable.

    El archivo CSV tiene las siguientes caracteristicas.

    Item Number Trans Quantity Fiscal Month Fiscal Year
    1234 1 7 2016
    12345 4 6 2016
    123456 10 8 2016

    Para recorrer el archivo utilizo la siguiente rutina:

     Dim TextFileTable As DataTable = Nothing
            Dim Column As DataColumn
            Dim Row As DataRow
            Dim UpperBound As Int32
            Dim ColumnCount As Int32
            Dim CurrentRow As String()
    
            While Not TextFileReader.EndOfData
                Try
                    CurrentRow = TextFileReader.ReadFields()
                    If Not CurrentRow Is Nothing Then
                        ''# Check if DataTable has been created
                        If TextFileTable Is Nothing Then
                            TextFileTable = New DataTable("TextFileTable")
                            ''# Get number of columns
                            UpperBound = CurrentRow.GetUpperBound(0)
                            ''# Create new DataTable
                            For ColumnCount = 0 To UpperBound
                                Column = New DataColumn()
    
                                If ColumnCount = 1 Then
                                    Column.DataType = System.Type.GetType("System.Double")' <-----En esta seccion  me salta el error 
                                    Column.ColumnName = "Column" & ColumnCount
                                    Column.Caption = "Column" & ColumnCount
                                    Column.ReadOnly = True
                                    Column.Unique = False
                                Else
                                    Column.DataType = System.Type.GetType("System.String")
                                    Column.ColumnName = "Column" & ColumnCount
                                    Column.Caption = "Column" & ColumnCount
                                    Column.ReadOnly = True
                                    Column.Unique = False
                                End If
    
                                 
                        TextFileTable.Columns.Add(Column)
                            Next
                        End If
                        Row = TextFileTable.NewRow
                        For ColumnCount = 0 To UpperBound
                            Row("Column" & ColumnCount) = CurrentRow(ColumnCount).ToString
                        Next
                        TextFileTable.Rows.Add(Row)
                    End If
                Catch ex As  _
                Microsoft.VisualBasic.FileIO.MalformedLineException
                    MsgBox("Line " & ex.Message & _
                    "is not valid and will be skipped.")
                End Try
            End While

    EL ERROR ES EL SIGUIENTE:

    Input string was not in a correct format Couldn't store in Type Column Expected type is Double

    Espero puedan orientarme.

    De antemano gracias!

    jueves, 6 de octubre de 2016 14:41

Respuestas

  • Creo que el problema está en que has metido el bucle que construye las columnas dentro del bucle que recorre las filas del archivo, con lo que a cada fila intenta añadir más columnas a la tabla y da un error porque no hay valores para esas columnas.

    Pero no confíes en el "creo" que he dicho. Ejecuta el programa en Visual Studio y síguelo paso a paso con el debugger fijándote en qué líneas va ejecutando y qué valor adoptan las variables en cada momento. Ahí te darás cuenta de qué columnas intenta añadir, o qué valores les intenta meter (por ejemplo, a veces te llevas sorpresas como por ejemplo que el dato leído del fichero va alineado con espacios en blanco y, claro, entonces da un error al convertirlo a Double. Pero ese tipo de problemas no son visibles a simple vista, es necesario examinar las variables con el debugger justo en el momento en que se está dando ese paso.

    jueves, 6 de octubre de 2016 18:57