Convertir conjunto de datos en archivo de texto delimitado por tabulaciones

Tengo un DataSet. Me gustaría convertir la columna del conjunto de datos como encabezado y los datos de la fila como datos en un archivo de texto delimitado por tabulaciones.

¿Hay alguna técnica que pueda hacer al final o tengo que hacer el bucle manualmente?

Sinceramente gracias, - Sel

preguntado el 06 de junio de 11 a las 23:06

3 Respuestas

private static string GetTextFromDataTable(DataTable dataTable)
{
    var stringBuilder = new StringBuilder();
    stringBuilder.AppendLine(string.Join("\t", dataTable.Columns.Cast<DataColumn>().Select(arg => arg.ColumnName)));
    foreach (DataRow dataRow in dataTable.Rows)
        stringBuilder.AppendLine(string.Join("\t", dataRow.ItemArray.Select(arg => arg.ToString())));
    return stringBuilder.ToString();
}

Uso:

var text = GetTextFromDataTable(dataSet.Tables[0]);
File.WriteAllText(filePath, text);

Respondido el 07 de junio de 11 a las 03:06

Creo que Sel no quiere hacer un bucle en filas y busca una solución mejor. - Desarrolladorx

La exportación a XML está integrada, pero al exportar a CSV, puede utilizar el siguiente código: desde http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/d2071fd4-8c7d-4d0e-94c3-9586df754df8/

esto solo escribe los datos, no las columnas, primero deberá recorrer los encabezados de las columnas.

Editar: actualizado para incluir nombres de columna ... No he ejecutado esto, y esta es una edición del enlace de arriba, por lo que puede o no funcionar, pero el concepto está aquí

StringBuilder str = new StringBuilder(); 
    // get the column headers
foreach (var c in NorthwindDataSet.Customers.Columns) { 
  str.Append("\"" + c.ColumnName.ToString() + "\"\t"); 
} 
str.Append("\r\n");

    // write the data here
foreach (DataRow dr in this.NorthwindDataSet.Customers) { 
 foreach (var field in dr.ItemArray) { 
   str.Append("\"" + field.ToString() + "\"\t"); 
 } 
 str.Append("\r\n");
} 
try { 
 My.Computer.FileSystem.WriteAllText("C:\\temp\\testcsv.csv", str.ToString(), false); 
} catch (Exception ex) { 
 MessageBox.Show("Write Error"); 
}

Respondido el 07 de junio de 11 a las 03:06

@Alex, edité el código original, que estaba separado por comas y ahora lo convertí en tabuladores separados. Ahora mismo no incluye encabezado. Es bastante fácil de conseguir. Lo editaré ahora. jason jong

Además, habrá una pestaña de seguimiento redundante. - alex aza

@Alex, es bastante fácil eliminar la pestaña final si el OP quisiera, pero en este contexto donde cada dato está envuelto entre comillas, el lector de CSV ignoraría la pestaña final - jason jong

Tenga en cuenta que deberá utilizar Linq para que esta solución funcione. Agregue lo siguiente using declaración a su código:

using System.Linq;

Respondido el 30 de junio de 15 a las 08:06

Creo que esto estaba destinado a ser un comentario a la respuesta de Alex Aza: stuartq

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.