DataTableをCSV文字列行に変換する必要があり、各列の文字列表現をコーディングする必要があります(例:特定の文字列形式など)カスタム文字列表現を使用したCSVへのDataTable
私はここでCSVへのDataTableに変換するために、いくつかの一般的な方法を見てきました:c# datatable to csvは
しかし、方法のいずれもが、カスタム文字列表現に対処していません。 提案がありますか?
DataTableをCSV文字列行に変換する必要があり、各列の文字列表現をコーディングする必要があります(例:特定の文字列形式など)カスタム文字列表現を使用したCSVへのDataTable
私はここでCSVへのDataTableに変換するために、いくつかの一般的な方法を見てきました:c# datatable to csvは
しかし、方法のいずれもが、カスタム文字列表現に対処していません。 提案がありますか?
カラムのタイプをチェックして、希望のフォーマット(日付の場合)を指定するだけです。
DataTable dt = ...
// Your custom date format.
string format = "yyyy-MM-dd";
var sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
sb.AppendLine(string.Join(",", row.ItemArray.Select(item =>
item is DateTime ? ((DateTime)item).ToString(format) : item.ToString()
)));
}
File.WriteAllText("test.csv", sb.ToString());
述べたようにc# datatable to csvからの借入、私はパラメータとして2つのフォーマット文字列を受け取り、このようになります拡張メソッドを作成します:
using (DataTable dt = new DataTable("Test"))
{
dt.Columns.Add(new DataColumn("id", typeof(int)));
dt.Columns.Add(new DataColumn("value", typeof(double)));
dt.Columns.Add(new DataColumn("dated", typeof(DateTime)));
dt.Rows.Add(new Object[] { 1, 2.3, DateTime.Now });
Console.WriteLine(dt.ToCSV("{0}|\"{1}\"|{2:d}", "{0}|{1}|{2}"));
Console.ReadKey();
}
:
static class MyExtensions
{
public static string ToCSV(this DataTable dataTable, string rowFormat, string headFormat)
{
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dataTable.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendFormat(headFormat, columnNames.ToArray<string>());
foreach (DataRow row in dataTable.Rows)
{
sb.AppendLine();
sb.AppendFormat(rowFormat, row.ItemArray);
}
return sb.ToString();
}
}
を次に、このようにそれを呼び出します
これを生産するには:
id|value|dated
1|"2.3"|04/10/2016
これにより、CSVの構造を正確に定義することができます。
構造がわからない場合、これは役に立たないでしょう。
達成しようとしていることが明確ではないが、具体的なシナリオ例をいくつかあげてもらえますか? – Arjang