导入包含字段中多个值的CSV文件

时间:2011-08-10 14:08:21

标签: c# csv data-import

以下是我尝试从CSV导入的数据

Time|Person|Products|Address

(now)|person1|val1*val2*val3|adr1

其中*是换行符/回车符

这是我导入时的样子:

(now)|person1|val1val2val3|adr1 

这就是我需要它的样子:

(now)|person1|val1|adr1

(now)|person1|val2|adr1 etc.

我尝试过:主要围绕string.Spilt()自定义编码CSV解析器,它给了我确切的结果,并且需要永远处理。我已经尝试了Sebastien Lorion的CSVReader并且它给了我完全相同的结果,尽管它显然更快更容易插入到我现有的代码中。我甚至尝试过具有完全相同结果的VB TextFieldParser

现在,这就是我的想法:

以某种方式传递字段的值(我不知道如何引用它们)当我将它传递给另一个返回List<string>对象的方法时,通过该方法我可以迭代并添加到DataTable并从那里做什么需要做。用旧叉子取下我的脑干。在我的呼吸下嘀咕着。

这是TextFieldParser代码:

OpenFileDialog op = new OpenFileDialog();
op.ShowDialog();
TextFieldParser parser = new TextFieldParser(new StreamReader(op.FileName));
parser.SetDelimiters(",");

while (!parser.EndOfData)
{
    contents.AddRange(parser.ReadFields());
}

2 个答案:

答案 0 :(得分:1)

在我看来,如果你必须坚持使用这种CSV格式,我会在你上面的内容中全部阅读;但之后,我会遍历您的数据集合,然后手动将产品串分割成您需要的组件。

尝试一次性完成所有这一切都会使问题复杂化。

一旦你有了单独的课程,你就可以在Carriage return上拆分产品,如下所示:

string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);

答案 1 :(得分:0)

查看FileHelpers库。它非常快速且非常灵活。虽然我认为你必须为你想做的事情写一些自定义处理逻辑。