C# 忽略没有数据的CSV行
我很惊讶,我没有在这里看到这方面的任何东西(或者可能我错过了)。解析CSV文件时,如果有没有数据的行,如何处理?我说的不是空行,而是空行,例如:C# 忽略没有数据的CSV行,c#,csv,textfieldparser,C#,Csv,Textfieldparser,我很惊讶,我没有在这里看到这方面的任何东西(或者可能我错过了)。解析CSV文件时,如果有没有数据的行,如何处理?我说的不是空行,而是空行,例如: ID,Name,Quantity,Price 1,Stuff,2,5 2,Things,1,2.5 ,,, ,,, ,,, 我使用TextFieldParser来处理数据中的逗号、多个分隔符等。我想到的两种解决方案是使用ReadLine而不是ReadFields,但我认为这将消除使用TextFieldParser的好处,因为这样我就必须以不同的方式处
ID,Name,Quantity,Price
1,Stuff,2,5
2,Things,1,2.5
,,,
,,,
,,,
我使用TextFieldParser来处理数据中的逗号、多个分隔符等。我想到的两种解决方案是使用ReadLine而不是ReadFields,但我认为这将消除使用TextFieldParser的好处,因为这样我就必须以不同的方式处理逗号。另一个选项是遍历字段,如果所有字段都为空,则删除该行。以下是我所拥有的:
dttExcelTable = new DataTable();
using (TextFieldParser parser = new TextFieldParser(fileName))
{
parser.Delimiters = new string[] { ",", "|" };
string[] fields = parser.ReadFields();
if (fields == null)
{
return null;
}
foreach (string columnHeader in fields)
{
dttExcelTable.Columns.Add(columnHeader);
}
while (true)
{
DataRow importedRow = dttExcelTable.NewRow();
fields = parser.ReadFields();
if (fields == null)
{
break;
}
for (int i = 0; i < fields.Length; i++)
{
importedRow[i] = fields[i];
}
foreach (var field in importedRow.ItemArray)
{
if (!string.IsNullOrEmpty(field.ToString()))
{
dttExcelTable.Rows.Add(importedRow);
break;
}
}
}
}
dttExcelTable=newdatatable();
使用(TextFieldParser=newtextfieldparser(文件名))
{
paraser.Delimiters=新字符串[]{“,”,“|”};
string[]fields=parser.ReadFields();
如果(字段==null)
{
返回null;
}
foreach(字段中的字符串列标题)
{
dttExcelTable.Columns.Add(columnHeader);
}
while(true)
{
DataRow importedRow=dttExcelTable.NewRow();
fields=parser.ReadFields();
如果(字段==null)
{
打破
}
for(int i=0;i
无需使用第三方CSV阅读器,您可以通过这种方式更改代码
.....
DataRow importedRow = dttExcelTable.NewRow();
for (int i = 0; i < fields.Length; i++)
importedRow[i] = fields[i];
if(!importedRow.ItemArray.All (ia => string.IsNullOrWhiteSpace(ia.ToString())))
dttExcelTable.Rows.Add(importedRow);
。。。。。
DataRow importedRow=dttExcelTable.NewRow();
for(int i=0;istring.IsNullOrWhiteSpace(ia.ToString()))
dttExcelTable.Rows.Add(importedRow);
使用All IEnumerable扩展,可以使用string.IsNullOrWhiteSpace检查ItemArray的每个元素。如果返回值为true,则有一个空字符串数组,可以跳过Add,只需将该行中的逗号替换为nothing,如果为null,则进行测试
strTemp = s.Replace(",", "");
if (!String.IsNullOrEmpty(strTemp)) { /*code here */}
似乎没有比我提供的更好的解决方案了。我只需要遍历所有字段,看看它们是否都是空的,然后再将其添加到我的datatable中 我发现的另一个解决方案是Steve的答案,即不使用TextFieldParser