C# 忽略没有数据的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的好处,因为这样我就必须以不同的方式处

我很惊讶,我没有在这里看到这方面的任何东西(或者可能我错过了)。解析CSV文件时,如果有没有数据的行,如何处理?我说的不是空行,而是空行,例如:

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