-1

我正在使用 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

文件助手

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

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

问题

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

在此处输入图像描述

4

3 回答 3

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 了解不足,无法重写它。不过它会起作用,因为我遇到了完全相同的问题并且它修复了它。

于 2013-10-11T08:39:24.453 回答
1

如果您的 CSV 看起来像:

值1,值2,值,e3

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

值1,值2,“值,e3”

我建议使用正则表达式拆分,例如:

var result = Regex.Split(csvline, ",(?=(?:[^']*'[^']*')*[^']*$)");
于 2013-10-10T18:17:48.673 回答
0

在这种情况下,文件有错误,除了说“用逗号分割时字段太多”之外,几乎不可能知道单个行有什么问题。您的代码无法修复此错误,您必须将其返回给上传损坏文件的用户。

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

于 2013-10-11T08:33:56.863 回答