我使用ASP.NET VB.NET,CSV文件上传和FileHelpers,ASP.NET控件是文件上传
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
<DelimitedRecord(",")> _
<IgnoreFirst(1)> _
<IgnoreEmptyLines> _
Class [MyClass]
<FieldTrim(TrimMode.Both)> _
Public Prop1 As String
<FieldTrim(TrimMode.Both)> _
Public Prop2 As String
End Class
数据中有一些逗号,因为它正在崩溃。
答案 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
。