不要将 csv 第一行另存为标题



我使用以下代码将CSV文件加载到DataTable对象中。问题是CSV文件中的第一行被加载到DataTable中作为标题行,而不是作为数据行。我如何使所有行从CSV文件加载为数据行,并使数据表头行空或任何东西。
这是我的代码

private DataTable ConvertCSVtoDataTable()
    {
        DataTable dataTable = new DataTable();
        using (StreamReader sr = new StreamReader(csvfilename))
        {
            string[] headers = sr.ReadLine().Split(',');
            foreach (string header in headers)
            {
                dataTable.Columns.Add(header);
            }
            while (!sr.EndOfStream)
            {
                string[] rows = sr.ReadLine().Split(',');
                DataRow dr = dataTable.NewRow();
                for (int i = 0; i < headers.Length; i++)
                {
                    dr[i] = rows[i];
                }
                dataTable.Rows.Add(dr);
            }
        }
        return dataTable;
    }

问题是您使用第一个ReadLine语句来添加Header对象。您只使用第二个ReadLine填充DataTable中的行。试试这个:

private DataTable ConvertCSVtoDataTable()
{
    bool firstRow = true;
    DataTable dataTable = new DataTable();
    using (StreamReader sr = new StreamReader(csvfilename))
    {
        while (!sr.EndOfStream)
        {
            string[] values = sr.ReadLine().Split(',');
            if (firstRow)
            {
                firstRow = false;
                for (int i = 0;i < values.Length; i++)
                {
                    dataTable.Columns.Add("Column" + i);
                }
            }
            DataRow dr = dataTable.NewRow();
            for (int i = 0; i < values.Length; i++)
            {
                dr[i] = values[i];
            }
            dataTable.Rows.Add(dr);
        }
    }
    return dataTable;
}

编辑:对不起,我忘了添加列标题…这应该是"可行的"。不幸的是,我没有c#调试器在我面前得到准确的语法,但我相信你可以弄清楚我想做什么。

你正在显式地读取"Header"。如果我正确地理解你,你只需要删除头部管理。这将给您留下没有标题或空标题的列。

private DataTable ConvertCSVtoDataTable()
{
    DataTable dataTable = new DataTable();
    using (StreamReader sr = new StreamReader(csvfilename))
    {
        while (!sr.EndOfStream)
        {
            string[] rows = sr.ReadLine().Split(',');
            DataRow dr = dataTable.NewRow();
            for (int i = 0; i < rows.Length; i++)
            {
                dr[i] = rows[i];
            }
            //IF the dataTable column count is less than the row column count add some columns.
            if (dataTable.Columns.size() < dr.Columns.size()){
                for(int i = 0; i < dr.Columns.size(); i++){
                   dataTable.Columns.add("");
                }
            }
            dataTable.Rows.Add(dr);
        }
    }
    return dataTable;
}

相关内容

最新更新