我很惊讶我在这里没有看到任何相关内容(或许我错过了)。在解析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;
}
}
}
}
答案 0 :(得分:2)
如果不使用第三方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);
使用All IEnumerable扩展,您可以使用string.IsNullOrWhiteSpace检查ItemArray的每个元素。如果返回为true,则表示您有一个空字符串数组,您可以跳过Add
答案 1 :(得分:0)
你可以只删除行中的逗号,如果它为null,则测试它。
strTemp = s.Replace(",", "");
if (!String.IsNullOrEmpty(strTemp)) { /*code here */}
答案 2 :(得分:0)
似乎没有比我提供的解决方案更好的解决方案。我只需要遍历所有字段,看看它们是否都是空的,然后再添加到我的数据表中。
我找到的唯一其他解决方案是史蒂夫的答案,即不使用TextFieldParser