-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

常に 3 列ではなく 4 列になりますが、CSV が次のようになっている場合:

値1,値2,"値,e3"

次のような正規表現の分割を使用することをお勧めします。

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

この場合、ファイルにエラーがあり、「コンマで分割するとフィールドが多すぎる」ということを除いて、個々の行の何が問題なのかを知ることはほとんど不可能です。コードでこのエラーを修正できる正気の方法はありません。壊れたファイルをアップロードしているユーザーにエラーを返す必要があります。

FileHelper のErrorMode設定をSaveAndContinue(こちらを参照) に設定して、エラーが発生しないようにし、ループの後でErrorsプロパティを確認し、空でない場合は、問題をユーザーに報告してErrorInfoErrorsコレクション内のそれぞれをリストすることができます。

于 2013-10-11T08:33:56.863 に答える