csv数据包含逗号时出错

时间:2013-10-10 16:33:13

标签: asp.net asp.net-mvc vb.net

我使用ASP.NET VB.NET,CSV文件上传和FileHelpers,ASP.NET控件是文件上传

读取CSV文件的代码

Using sr As New StreamReader(FileUpload1.PostedFile.InputStream)
Dim engine As New FileHelperEngine(GetType([MyClass]))
    For Each entry As [MyClass] In engine.ReadStream(sr)
    Next
End Using

FileHelpers

<DelimitedRecord(",")> _
<IgnoreFirst(1)> _
<IgnoreEmptyLines> _
Class [MyClass]
    <FieldTrim(TrimMode.Both)> _
    Public Prop1 As String

    <FieldTrim(TrimMode.Both)> _
    Public Prop2 As String
End Class

问题

数据中有一些逗号,因为它正在崩溃。

enter image description here

3 个答案:

答案 0 :(得分:2)

VB.net提供了您在Microsoft.VisualBasic.FileIO中寻找的内容。您可以在C#中使用它,如下所示:

TextFieldParser parser = new TextFieldParser(pFileName);
parser.SetDelimiters(",");
parser.TextFieldType = FieldType.Delimited;

while (!parser.EndOfData)
            {
                string current = parser.ReadFields();
            }

修改

刚刚注意到你正在使用VB - 基本前提保持不变,但对VB.net重写不够了解。它会工作,因为我有完全相同的问题,它修复了它。

答案 1 :(得分:1)

如果您的CSV如下所示:

  

值1,值2,VALU,E3

它总是4列而不是3列 但如果CSV看起来像:

  

值1,值2, “VALU,E3”

我推荐使用regexp分割如下:

var result = Regex.Split(csvline, ",(?=(?:[^']*'[^']*')*[^']*$)");

答案 2 :(得分:0)

在这种情况下,文件有错误并且几乎不可能知道单个行的错误,除了说“用逗号分割时有太多字段”。你的代码没有理智的方法可以解决这个错误,你必须把它扔回上传破碎文件的用户。

您可以将FileHelper的ErrorMode设置为SaveAndContinue(请参阅here),以便它不会出错,并在循环检查Errors属性后如果它不为空,请向用户报告问题,列出ErrorInfo集合中的每个Errors