web-dev-qa-db-ja.com

C#でCSVファイルにカンマを含む値を書き込む方法は?

データの保存にデータテーブルを使用しています。

データをデータテーブルからCSVファイルにエクスポートしています。

場合によっては、コンマ(,)を含む値が存在する可能性があるため、値は正しくエクスポートされません。

例えば

値が"9,11,32"であることを考慮してください。そのようにエクスポートする必要があります。

しかし、最初の列を9にすると、次の列は11になります。

CSVファイルの同じ列に9,11,32を表示したい。それ、どうやったら出来るの?

19
user1027129

"\" "+ yourdata +"\""のように、バックスラッシュ内にデータを置くだけです。以下の例を見てください。

StringWriter csv = new StringWriter();
// Generate header of the CSV file
csv.WriteLine(string.Format("{0},{1}", "Header 1", "Header 2"));
// Generate content of the CSV file
foreach (var item in YourListData)
{
    csv.WriteLine(string.Format("{0},{1}", item.Data1, "\"" + item.Data2 + "\""));
}

return File(new System.Text.UTF8Encoding().GetBytes(csv.ToString()), "application/csv", string.Format("{0}{1}", "YourFileName", ".csv"));

この例では、data2にカンマ「、」が含まれている可能性があります

21
Anh Hoang
  1. embedded commasを含むフィールドは、二重引用符で区切る必要があります。

    フィールド:

    1. abc, xyz
    2. pqr

csvバージョン:

"abc, xyz" , pqr
  1. double quote文字を含むフィールドは二重引用符で囲む必要があり、埋め込まれた二重引用符はそれぞれ、連続する二重引用符のペアで表す必要があります。

    フィールド:

    Welcome to "My World"
    

    csvバージョン:

    "Welcome to ""My World"""
    
12
BrainCoder

データにカンマがある場合、csvに入力する必要があります http://tools.ietf.org/html/rfc418 は、引用符を次のように使用するように指示しています:

"123,56","A dog, cat and a frog"
6
Zesar
StringBuilder sb = new StringBuilder();          
        foreach (DataColumn col in dt.Columns)
        {
            if (col.ColumnName.Contains(","))
            {
                sb.Append(String.Format("\"{0}\",", col.ColumnName));
            }
            else
            {
                sb.Append(String.Format("{0},", col.ColumnName));
            }
        }
2
Gaurav Dubey

カンマで区切られた値の単一の列を持つcsvを作成するには、スペースなしで二重引用符の間にカンマで区切られた値を記述します。

例私は2つの列CodeDescription With Values Code01Val1、Val2、Valを持っています。特定のデータでcsvを作成するには、メモ帳で行の下に書き込み、csv拡張子を付けて保存します。

Code,Description
Code01,"Val1,Val2,Val3"
1
Ravi Pipaliya

値を二重引用符で囲みます。

string ValueToEscape = "a,b";

"\"" + ValueToEscape + "\""

CSV出力= a、b

0