我已经从excel文件中获取了一个csv,并将其放入数据表中。 excel csv文件中的单元格是空的,当我遍历它们时,它们也会被迭代。我希望不要迭代它们。
foreach (DataRow datarow in sorted.Rows)
{
Boolean first = true;
Console.Write(Environment.NewLine);
foreach (var item in datarow.ItemArray)
{
if (item != null)
{
int i = 0;
if (first)
first = false;
else
Console.Write(",");
Console.Write(item);
}
else
break;
}
}
我已经尝试了上面的内容,它仍然遍历空单元格。
答案 0 :(得分:1)
扩展JohnD答案,您可以尝试这一点,假设您只想将字段输出到控制台:
var text = string.Empty;
foreach (DataRow datarow in sorted.Rows)
{
var items = datarow.ItemArray
.Where(x => ((x != null) && !string.IsNullOrEmpty(x.ToString())));
var textJoined = string.Join(",", items);
text += textJoined + Environment.NewLine;
}
Console.WriteLine(text);
您可能不熟悉LINQ,因此需要使用以下语句:
using System.Linq;
此解决方案再次假设您只想将值输出到控制台窗口,它不会假设您要遍历给定行的所有列。如果这是您想要的,请告诉我,我可以进行适当的修改
<强> [编辑] 强> 哎呀只是重新阅读你的问题,似乎你想要遍历每一列,所以这里有一个解决方案:
var text = string.Empty;
foreach (DataRow datarow in sorted.Rows)
{
var items = datarow.ItemArray
.Where(x => ((x != null) && !string.IsNullOrEmpty(x.ToString())));
var currentLine = string.Empty;
foreach(var item in items)
{
// do something with item
// in this case append to currentLine
currentLine += item + ",";
}
text += currentLine.Substring(0, currentLine.Length - 2) + Environment.NewLine;
}
Console.WriteLine(text);
您得到相同的结果,现在您可以为每个项目执行所需的操作
答案 1 :(得分:0)
假设该项目确实是一个字符串,请使用String.IsNullOrEmpty()
检查item
是空还是空。
if (item != null && !String.IsNullOrEmpty(item.ToString()))
答案 2 :(得分:-1)
foreach (DataRow datarow in sorted.Rows)
{
Boolean first = true;
Console.Write(Environment.NewLine);
foreach (var item in datarow.ItemArray)
{
if (!string.IsNullOrEmpty((item ?? "").ToString()))
{
int i = 0;
if (first)
first = false;
else
Console.Write(",");
Console.Write(item);
}
else
continue;
}
}
答案 3 :(得分:-1)
为什么不喜欢这个?
// ItemArray is object[]
foreach (var item in datarow.ItemArray)
{
if (first)
{
first = false;
}
else
{
// I think you are expecting to see the comma here even the previous element is empty e.g. A,B,,D (that missing C)
Console.Write(",");
}
// so here we cannot guarantee "if (item is string)"
if (item != null)
{
Console.Write(item.ToString());
}
}
(我习惯将所有代码包装在{})