我有一个DataSet。我想将数据集列作为标题和行数据作为数据转换为制表符分隔的文本文件。将数据集转换为文本文件制表符分隔文件
是否有任何技术我可以在我的最后做,或者我必须手动循环?
表示衷心感谢, - SEL
我有一个DataSet。我想将数据集列作为标题和行数据作为数据转换为制表符分隔的文本文件。将数据集转换为文本文件制表符分隔文件
是否有任何技术我可以在我的最后做,或者我必须手动循环?
表示衷心感谢, - SEL
导出到XML是内置的,但导出为CSV文件,可以使用下面的代码 - 从http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/d2071fd4-8c7d-4d0e-94c3-9586df754df8/
这个只写数据,而不是列,您需要先循环列标题。
编辑:更新为包含列名称...我没有运行此操作,并且这是来自上面链接的编辑,所以它可能会或可能不会工作,但这里的概念是
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");
}
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();
}
用法:
var text = GetTextFromDataTable(dataSet.Tables[0]);
File.WriteAllText(filePath, text);
您的功能运行良好 – 2011-06-07 02:41:40
我认为,Sel不想循环行,并寻找更好的解决方案! – DeveloperX 2011-06-07 04:18:06
注意,你将需要使用LINQ此解决方案的工作。下面using
语句添加到代码:
using System.Linq;
我认为这是为了评论Alex Aza的回答 – StuartQ 2015-08-17 09:35:33
@Alex,我编辑的原代码,这是逗号分隔,并将其转化为现在分开了标签。现在它不包含标题。很容易得到..我现在编辑它 – 2011-06-07 02:33:05
此外,将有多余的尾随选项卡。 – 2011-06-07 02:34:35
@Alex,如果OP希望删除尾部标签非常容易,但是在这种情况下,每个数据都用引号包裹,尾部标签将被CSV阅读器忽略 – 2011-06-07 02:40:26