Пример #1
0
        /// <summary>
        /// reads a CSV file into a Datatable and deduces the data type in each column.
        /// </summary>
        public static DataTable ReadCSVToTable(string filePath, bool isFirstRowHeader)
        {
            string[] csvRows = File.ReadAllLines(filePath);
            if (csvRows.Length == 0)
            {
                return(null);
            }

            //convert rows 1-300 toList of strings so can deduce their types.
            var listOfStringArrays = ConvertCSVRowsToListOfStringArrays(csvRows, 1, 300);

            Type[] types = DataTools.GetArrayTypes(listOfStringArrays);

            //initialise the DataTable
            var dt = new DataTable();

            if (isFirstRowHeader)
            {
                string[] headers = csvRows[0].Split(',');
                for (int i = 0; i < headers.Length; i++)
                {
                    dt.Columns.Add(headers[i], types[i]);
                }

                csvRows[0] = null; //remove header row
            }
            else
            {
                for (int i = 0; i < types.Length; i++)
                {
                    dt.Columns.Add("Field" + i, types[i]);
                }
            }

            //fill the DataTable
            foreach (string csvRow in csvRows)
            {
                if (csvRow == null)
                {
                    continue; //skip header row
                }

                var fields = csvRow.Split(',');
                var row    = dt.NewRow();
                row.ItemArray = MakeItemArray(fields, types);
                dt.Rows.Add(row);
            }

            return(dt);
        }