【发布时间】:2015-08-15 03:02:44
【问题描述】:
在搜索并尝试了不同的方法后,我发现我要么对我编写代码的方式不满意,要么它不适合我。我是编程新手,所以我的理解有限。请记住答案。
我想逐行读取 .csv 文件并跳过空白行。将行的内容放入对象列表中。除了跳线部分,我一切正常。也欢迎任何关于改进我的代码任何部分的反馈。我喜欢建设性的批评。
public void CardaxCsvFileReader()
{
string cardaxCsvPath = (@"C:\Cardax2WkbTest\Cardax\CardaxTable.csv");
try
{
using (System.IO.StreamReader cardaxSR =
new System.IO.StreamReader(System.IO.File.OpenRead(cardaxCsvPath)))
{
string line = "";
string[] value = line.Split(',');
while (!cardaxSR.EndOfStream)
{ // this commented out part is what I would like to work but doesn't seem to work.
line = cardaxSR.ReadLine();//.Skip(1).Where(item => !String.IsNullOrWhiteSpace(item));
value = line.Split(',');
if (line != ",,,,,") // using this as temp to skip the line because the above commented out part doesn't work.
{
CardaxDataObject cardaxCsvTest2 = new CardaxDataObject();
cardaxCsvTest2.EventID = Convert.ToInt32(value[0]);
cardaxCsvTest2.FTItemID = Convert.ToInt32(value[1]);
cardaxCsvTest2.PayrollNumber = Convert.ToInt32(value[2]);
cardaxCsvTest2.EventDateTime = Convert.ToDateTime(value[3]);
cardaxCsvTest2.CardholderFirstName = value[4];
cardaxCsvTest2.CardholderLastName = value[5];
Globals.CardaxQueryResult.Add(cardaxCsvTest2);
}
}
}
}
catch (Exception)
{
myLog.Error("Unable to open/read Cardax simulated punch csv file! " +
"File already open or does not exist: \"{0}\"", cardaxCsvPath);
}
【问题讨论】:
-
Split(",")是一种读取 csv 数据的糟糕方式。 -
请尽情畅谈您对更好方法的看法。我愿意尝试改进我的代码。
-
Split(",")容易受到各种边缘情况的影响(容易出错),而且速度不是很快。有专用的 CSV 解析器非常易于使用,包括至少两个内置于 .Net 框架中(一个 csv OLE 数据库驱动程序和 TextFieldParser 类)。 -
另外:当你谈到“空白”行时:这些行还会有 5 个逗号吗?
-
是的,银行 csv 行仍然有 5 ,逗号。这样做似乎有效...
标签: c# csv streamreader