1

エスケープされていないピリオドがたくさんある場合に適合をスローする Web サイトにアップロードする CSV ファイルを作成しています。

どのフィールドをエスケープする必要があるかを見つけようとして、正規表現を少し学習するのが楽しくて頭が痛くなりましたが、これは無意味ですか? すべてのフィールドを二重引用符で囲んで処理しない理由はありますか?

やり過ぎのように思えますが、各文字列を検索するのはやり過ぎかもしれません。

これが私の機能です:

Private Sub WriteToCSVFile(ByVal s As String(,), ByVal sFileName As String)
    Dim sb As New System.Text.StringBuilder

    For i As Integer = 0 To s.GetUpperBound(0)
        For j As Integer = 0 To s.GetUpperBound(1)
            If Regex.Match(s(i, j), "^[\w ]*$").Success Then
                sb.Append(s(i, j) & IIf(j = s.GetUpperBound(1), "", ","))
            Else
                sb.Append("""" & s(i, j) & IIf(j = s.GetUpperBound(1), """", ""","))
            End If
        Next
        sb.AppendLine()
    Next

    System.IO.File.WriteAllText(Application.StartupPath & "\" & sFileName, sb.ToString)

End Sub
4

4 に答える 4

2

欠点は (何かあるかどうか尋ねたので)、無条件に引用符を追加すると、CSV ファイルのサイズ、ファイルの読み取りにかかる時間、およびファイルが処理されているときのメモリ フットプリントが増加する可能性があることです。ただし、メモリとストレージが特に制約されていない限り、実際の影響はほとんど無視できます。

RFC4180で定義が試みられていますが、CSV 形式の正式な標準はありません。RFC4180 では、すべての場合に二重引用符を使用できますが、一部のシステムがこの規則をサポートしていない可能性があることに注意してください。

各フィールドは、二重引用符で囲まれている場合と囲まれていない場合があります (ただし、Microsoft Excel などの一部のプログラムでは、二重引用符がまったく使用されません)。

CSV ファイルのコンシューマが RFC のこの部分に準拠している場合は、すべてのフィールドを二重引用符で囲んでも問題ありません。

于 2013-05-08T23:13:25.873 に答える
1

数値ではなく文字列を二重引用符で囲むことをお勧めします。文字列内の二重引用符もエスケープするコードを書く必要があります。

例えば:

1,"Charles ""Pretty Boy"" Floyd","1 Short St, Smallville"
2,"Charlie ""Lucky"" Luciano","1 Short St, Smallville"

実際に機能することを考慮すると、追加のオーバーヘッドは些細なことです。

于 2013-05-08T23:42:58.630 に答える