ホームページ > バックエンド開発 > C++ > C#に埋め込まれたコンマでCSV列を適切に分割するにはどうすればよいですか?

C#に埋め込まれたコンマでCSV列を適切に分割するにはどうすればよいですか?

DDD
リリース: 2025-01-26 16:56:10
オリジナル
912 人が閲覧しました

How to Properly Split CSV Columns with Embedded Commas in C#?

C# で埋め込みカンマを含む CSV 列を分割する

CSV ファイルでは通常、カンマを使用して列を区切ります。ただし、一部の列自体にカンマが含まれている場合があり、CSV データを異なる文字列に分割するときに問題が発生する可能性があります。

質問:

CSV 行が指定された場合:

<code>2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,"Corvallis, OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34</code>
ログイン後にコピー

この行を文字列の配列に分割して、「Corvallis, OR」のテキストが 1 つのフィールドに残るようにするにはどうすればよいですか?

解決策:

指定された正規表現は、すべてのカンマが引用符の外側または内側にある CSV データでのみ機能します。この問題を解決するには、Microsoft.VisualBasic.FileIO 名前空間で TextFieldParser クラスを使用することを検討してください。このクラスは、引用符で囲まれたフィールドと引用符で囲まれていないフィールドがある区切りファイルを処理するように設計されています。

コード:

<code class="language-csharp">using Microsoft.VisualBasic.FileIO;

// ...

string csv = "2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,\"Corvallis, OR\",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34";

using (TextFieldParser parser = new TextFieldParser(new StringReader(csv)))
{
    parser.HasFieldsEnclosedInQuotes = true;
    parser.SetDelimiters(",");

    while (!parser.EndOfData)
    {
        string[] fields = parser.ReadFields();
        foreach (string field in fields)
        {
            Console.WriteLine(field);
        }
    }
}</code>
ログイン後にコピー

出力:

<code>2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34</code>
ログイン後にコピー

注:

TextFieldParserを使用する場合は、「参照の追加.NET」タブでMicrosoft.VisualBasicへの参照を追加する必要があります。 このコードでは、using ステートメントも使用して、TextFieldParser が正しく閉じられていることを確認します。

以上がC#に埋め込まれたコンマでCSV列を適切に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート