如何在C#中读取CSV文件,这不需要';在单列中没有值吗?
我试图读取C代码中的CSV文件作为示例。此CSV文件有三列,其中一列在几行中没有值。因此,它被认为是C语言流读取器中的一种新的行反斜杠(\),当我在记事本++中打开文件时,它显示如下图像: 但在MS Excel中,如下图所示,该列上没有显示任何内容 在这里,Notepad++和MS Excel都以不同的方式显示数据。在Notepad++中,它显示“”而在Excel中,它显示空值。每当我们通过下面提到的C代码读取文件时,它采用Notepad++中所示的格式 读取CSV代码如何在C#中读取CSV文件,这不需要';在单列中没有值吗?,c#,asp.net,csv,excel-2010,C#,Asp.net,Csv,Excel 2010,我试图读取C代码中的CSV文件作为示例。此CSV文件有三列,其中一列在几行中没有值。因此,它被认为是C语言流读取器中的一种新的行反斜杠(\),当我在记事本++中打开文件时,它显示如下图像: 但在MS Excel中,如下图所示,该列上没有显示任何内容 在这里,Notepad++和MS Excel都以不同的方式显示数据。在Notepad++中,它显示“”而在Excel中,它显示空值。每当我们通过下面提到的C代码读取文件时,它采用Notepad++中所示的格式 读取CSV代码 受保护列表读取文件(
受保护列表读取文件(字符串文件路径)
{
列表内容=新列表();
使用(StreamReader csvReader=newstreamreader(filePath))
{
string line=string.Empty;
而((line=csvReader.ReadLine())!=null)
{
如果(line.Trim()长度>0)
{
if(line.Count(x=>x==',')>=1)
{
内容。添加(行);
}
}
}
}
返回内容;
}
目前它正在减少C#中的当前行,并在循环的第二次迭代中移动
请查看此屏幕截图:
1) 有完整的数据
2) 对于空白数据,行分为两部分。这是第1部分
3) 对于空白数据,行分为两部分。这是第2部分
期望O/P:应将其视为C代码中的一行。
如何在C代码中处理这种情况?使用提供逗号和换行符作为分隔符,并在保留空值的选项中不提供任何分隔符。我认为此代码将对您有所帮助。您可以根据需要自定义它:
private static DataTable GetDataTabletFromCSVFile1(string csv_file_path1)
{
DataTable table2 = new DataTable("Real");
try
{
using (TextFieldParser csvReader1 = new TextFieldParser(csv_file_path1))
{
csvReader1.SetDelimiters(new string[] { "," });
csvReader1.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader1.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn2 = new DataColumn(column);
datecolumn2.AllowDBNull = true;
table2.Columns.Add(datecolumn2);
}
while (!csvReader1.EndOfData)
{
string[] fieldData1 = csvReader1.ReadFields();
table2.Rows.Add(fieldData1);
}
}
foreach (DataRow dr in table2.Rows)
{
foreach (DataColumn dc in table2.Columns)
{
if (string.IsNullOrEmpty(dr[dc.ColumnName].ToString()))
{
dr[dc.ColumnName] = DBNull.Value;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Select New File");
}
return table2;
}
那么您期望的输出是什么呢?有正确编写的库可以读取CSV。请使用其中一个。这些库不能处理此问题scenario@er-mfahhgk请查看更新的问题和o/p@BenCSV文件来自第三方,我无法修改。它应该逐行读取。我可以知道我的意思是它失败的原因吗?
private static DataTable GetDataTabletFromCSVFile1(string csv_file_path1)
{
DataTable table2 = new DataTable("Real");
try
{
using (TextFieldParser csvReader1 = new TextFieldParser(csv_file_path1))
{
csvReader1.SetDelimiters(new string[] { "," });
csvReader1.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader1.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn2 = new DataColumn(column);
datecolumn2.AllowDBNull = true;
table2.Columns.Add(datecolumn2);
}
while (!csvReader1.EndOfData)
{
string[] fieldData1 = csvReader1.ReadFields();
table2.Rows.Add(fieldData1);
}
}
foreach (DataRow dr in table2.Rows)
{
foreach (DataColumn dc in table2.Columns)
{
if (string.IsNullOrEmpty(dr[dc.ColumnName].ToString()))
{
dr[dc.ColumnName] = DBNull.Value;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Select New File");
}
return table2;
}