Что произойдет, если число выборок будет меняться каждую эпоху с использованием метода фильтра tf.data.Dataset? (моя программа зависает)

Следующая короткая версия открывается отлично в Excel, возможно, ваша проблема была конечной запятой

.net = 3.5

StringBuilder sb = new StringBuilder(); 

string[] columnNames = dt.Columns.Cast<DataColumn>().
                                  Select(column => column.ColumnName).
                                  ToArray();
sb.AppendLine(string.Join(",", columnNames));

foreach (DataRow row in dt.Rows)
{
    string[] fields = row.ItemArray.Select(field => field.ToString()).
                                    ToArray();
    sb.AppendLine(string.Join(",", fields));
}

File.WriteAllText("test.csv", sb.ToString());

.net> = 4.0

И как сказал Тим, если вы находитесь на .net> = 4, вы можете сделать его еще короче:

StringBuilder sb = new StringBuilder(); 

IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
                                  Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));

foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
    sb.AppendLine(string.Join(",", fields));
}

File.WriteAllText("test.csv", sb.ToString());

Как было предложено Кристианом, если вы хотите обрабатывать специальные символы, экранирующие в полях , замените блок цикла на:

foreach (DataRow row in dt.Rows)
{
    IEnumerable<string> fields = row.ItemArray.Select(field => 
      string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
    sb.AppendLine(string.Join(",", fields));
}

И последнее предложение, вы можете написать содержимое csv по строкам, а не как целостный документ, чтобы избежать наличия большого документа в памяти.

2
задан Hamed 16 January 2019 в 21:18
поделиться