不要将 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;
}
我正在使用以下代码将我的 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;
}