bob*_*988 17 c# export dataset text-files
网上有很多关于如何从文本文件中填充DataSet的例子,但我想反过来.我唯一能找到的就是这个,但似乎......不完整?
我希望它是一种可读格式,而不仅仅是逗号分隔,因此如果有意义,每行上的列之间的间距不相等.这是我的意思的一个例子:
Column1 Column2 Column3
Some info Some more info Even more info
Some stuff here Some more stuff Even more stuff
Bits and bobs
Run Code Online (Sandbox Code Playgroud)
注意:我的DataSet中只有一个DataTable,因此无需担心多个DataTable.
编辑:当我说"可读"时,我的意思是人类可读.
提前致谢.
Roy*_*ode 17
这应该很好地区分固定长度的字体文本,但它确实意味着它将处理完整的DataTable两次(传递1:每列找到最长的文本,传递2:输出文本):
static void Write(DataTable dt, string outputFilePath)
{
int[] maxLengths = new int[dt.Columns.Count];
for (int i = 0; i < dt.Columns.Count; i++)
{
maxLengths[i] = dt.Columns[i].ColumnName.Length;
foreach (DataRow row in dt.Rows)
{
if (!row.IsNull(i))
{
int length = row[i].ToString().Length;
if (length > maxLengths[i])
{
maxLengths[i] = length;
}
}
}
}
using (StreamWriter sw = new StreamWriter(outputFilePath, false))
{
for (int i = 0; i < dt.Columns.Count; i++)
{
sw.Write(dt.Columns[i].ColumnName.PadRight(maxLengths[i] + 2));
}
sw.WriteLine();
foreach (DataRow row in dt.Rows)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
if (!row.IsNull(i))
{
sw.Write(row[i].ToString().PadRight(maxLengths[i] + 2));
}
else
{
sw.Write(new string(' ', maxLengths[i] + 2));
}
}
sw.WriteLine();
}
sw.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
最好将数据导出为xml格式.
数据集有一个方法来完成这项工作:
DataSet ds = new DataSet();
ds.WriteXml(fileName);
Run Code Online (Sandbox Code Playgroud)
您可以读取xml并填充数据集数据,如下所示:
DataSet ds = new DataSet();
ds.ReadXml(fileName);
Run Code Online (Sandbox Code Playgroud)
我会做的是:
foreach (DataRow row in myDataSet.Tables[0].Rows)
{
foreach (object item in row.ItemArray)
{
myStreamWriter.Write((string)item + "\t");
}
myStreamWriter.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)
如果你想要标题,可以在循环之前添加列名.我认为,虽然相当简单,但应该做到这一点.