2

CSV (タブ区切り) を介して情報のデータセットを出力する必要がある状況があります。

問題は、列の値に値が含まれている場合、二重引用符で囲む必要があることです。

値のタイプは、英数字の文字列から DateTime 形式の値までさまざまです。

これよりも簡単な方法があるかどうか疑問に思っていました:

(string.IsNullOrWhiteSpace(evt.Name)?null:string.Format("\"{0}\"", evt.Name))

文字列値にエクスポートされる各値に対して。

編集 2013-07-08 11:06 CST (修正済み 11:17 CST)

public string QuoteFormat(object val)
{
    if(val != null) {
        if(val == typeof(string))
            val = (val as string).Replace("\"" , "\"\"");

        return string.Format("\"{0}\"" , val);
    }
    return null;
}
4

3 に答える 3

2

あなたの問題をより明確に表現する方法があるかどうかを尋ねました。あなた自身のコードは優れており、問題は見られませんが、拡張機能を使用することをお勧めします。

public static class GoldBishopExtensions
{
    public static string Transform(this string source, Func<string, string> transform, string fallback = null)
    {
        return !String.IsNullOrWhiteSpace(source) 
                   ? transform(source) 
                   : fallback;
    }
}

そして、それを次のように使用します。

// Return "evt.Name" if String is not null or whitespaces
// return null otherwise
evt.Name.Transform(name => String.Format("\"{0}\"", name));

または:

// Return ("evt.Name") if String is not null or whitespaces
// return (No Value) otherwise
evt.Name.Transform(name => String.Format("\"{0}\"", name), "No Value");

しかし、コメントで述べたように、コードはそのままで良いので、これは本当に必要ありません。

編集:あなた自身の特定の問題については、拡張機能は次のようになります:

public static class GoldBishopExtensions
{
    public static string Quote(this string source, string fallback = null)
    {
        return !String.IsNullOrWhiteSpace(source) 
                   ? String.Format("\"{0}\"", source) 
                   : fallback;
    }
}

evt.Name.Quote();
于 2013-07-08T16:05:45.433 に答える