不要将 csv 第一行保存为 header

Don't Save csv first line as header

我正在使用以下代码将我的 CSV 文件加载到 DataTable object。问题是 CSV 文件的第一行作为 header 行而不是数据行加载到 DataTable 中。如何使 CSV 文件中的所有行作为数据行加载并使数据表 header 行为空或任何内容。
这是我的代码

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;
    }

已编辑: 抱歉,我忘记添加列 headers... 这应该 "workish"。不幸的是,我面前没有 C# 调试器来获得准确的语法,但我相信你可以弄清楚我想要做什么。

您正在明确阅读 "Header"。如果我对你的理解是正确的,你只需要删除 header 管理。这将使您留下没有 header 或空 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;
}

问题是您使用第一个 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;
}