将C#数据集导出到文本文件
网上有很多关于如何从文本文件填充数据集的例子,但我想做的恰恰相反。我唯一能找到的是,但似乎。。。不完整 我希望它是一种可读的格式,而不仅仅是逗号分隔的,所以如果有意义的话,每行上的列之间的间距是不相等的。以下是我的意思的一个例子:将C#数据集导出到文本文件,c#,dataset,export,text-files,C#,Dataset,Export,Text Files,网上有很多关于如何从文本文件填充数据集的例子,但我想做的恰恰相反。我唯一能找到的是,但似乎。。。不完整 我希望它是一种可读的格式,而不仅仅是逗号分隔的,所以如果有意义的话,每行上的列之间的间距是不相等的。以下是我的意思的一个例子: Column1 Column2 Column3 Some info Some more info Even more info Some stuff here Some more stuff Even more
Column1 Column2 Column3
Some info Some more info Even more info
Some stuff here Some more stuff Even more stuff
Bits and bobs
注意:我的数据集中只有一个数据表,所以不需要担心多个数据表
编辑:当我说“可读”时,我指的是人类可读
提前感谢。最好将数据导出为xml格式 dataset有一个用于此工作的方法:
DataSet ds = new DataSet();
ds.WriteXml(fileName);
您可以读取xml并填充数据集数据,如下所示:
DataSet ds = new DataSet();
ds.ReadXml(fileName);
只需迭代数据表中的行并向文件中添加行,如所提供的示例所示
foreach (DataRow row in dt.Rows)
{
object[] array = row.ItemArray;
for (i = 0; i < array.Length - 1; i++)
{
sw.Write(array[i].ToString() + ";");
}
sw.Write(array[i].ToString());
sw.WriteLine();
}
foreach(数据行中的数据行)
{
object[]数组=row.ItemArray;
对于(i=0;i
其中sw
是用于保存数据的StreamWriter文件。问题到底出在哪里?我要做的是:
foreach (DataRow row in myDataSet.Tables[0].Rows)
{
foreach (object item in row.ItemArray)
{
myStreamWriter.Write((string)item + "\t");
}
myStreamWriter.WriteLine();
}
如果需要标题,可以在循环之前添加列名。我认为,虽然这很简单,但应该可以做到这一点。下面的内容呢
public static void Write(DataTable dt, string filePath)
{
int i = 0;
StreamWriter sw = null;
sw = new StreamWriter(filePath, false);
for (i = 0; i < dt.Columns.Count - 1; i++)
{
sw.Write(dt.Columns[i].ColumnName + " ");
}
sw.Write(dt.Columns[i].ColumnName);
sw.WriteLine();
foreach (DataRow row in dt.Rows)
{
object[] array = row.ItemArray;
for (i = 0; i < array.Length - 1; i++)
{
sw.Write(array[i] + " ");
}
sw.Write(array[i].ToString());
sw.WriteLine();
}
sw.Close();
}
publicstaticvoidwrite(DataTable dt,stringfilepath)
{
int i=0;
StreamWriter sw=null;
sw=新StreamWriter(文件路径,false);
对于(i=0;i
这将很好地将固定长度字体文本隔开,但这确实意味着它将处理完整的数据表两次(传递1:查找每列最长文本,传递2:输出文本):
静态无效写入(DataTable dt,string outputFilePath)
{
int[]maxLength=新的int[dt.Columns.Count];
对于(int i=0;i最大长度[i])
{
最大长度[i]=长度;
}
}
}
}
使用(StreamWriter sw=新StreamWriter(outputFilePath,false))
{
对于(int i=0;i
我是软件行业的初学者,我只是想帮助你们。这可能不是你问题的最终解决方案
我已经阅读了你标注的链接。确实,它只以逗号删除格式导出。如果你想出口像你的尺寸,你必须采取一些额外的努力。LINQ将大大减少您的工作量。您需要做的是:1)计算数据表中每一列的最大宽度(使用LINQ这可以在一条语句中完成,否则您必须借助foreach)。2) 在将实际单元格值写入文本文件之前,请使用String.Format根据第一步中计算的宽度进行定位
List<int> ColumnLengths = new List<int>();
ds.Tables["TableName"].Columns.Cast<DataColumn>().All((x) =>
{
{
ColumnLengths.Add( ds.Tables["TableName"].AsEnumerable().Select(y => y.Field<string>(x).Length).Max());
}
return true;
});
foreach (DataRow row in ds.Tables["TableName"].Rows)
{
for(int col=0;col<ds.Tables["TableName"].Columns.Count;col++)
{
SW.Write(row.Field<string>(ds.Tables["TableName"].Columns[col]).PadLeft(ColumnLengths[col] + (4 - (ColumnLengths[col] % 4))));
}
SW.WriteLine();
}
List columnLength=新列表();
ds.Tables[“TableName”].Columns.Cast().All((x)=>
{
{
添加(ds.Tables[“TableName”].AsEnumerable().Select(y=>y.Field(x.Length).Max());
}
返回true;
});
foreach(ds.Tables[“TableName”].Rows中的DataRow行)
{
对于(int COL=0;COLYE确实知道它是用固定字体排列的,对吗?就像一个魅力。我不介意它在数据集中迭代两次,因为它只是很小的。考虑到这个解决方案的其他人可能想考虑使用大数据集的备选方案。谢谢,罗伊!@数据集中的SwethaVijayan PASS(例如:代码> DS < /代码>)作为参数而不是DataTable,然后在表示foreach(dt.Rows中的DataRow)的行上方插入一行foreach(ds.Tables中的DataTable dt)
。
谢谢我得到了解决方案,我使用了for
而不是foreach
List<int> ColumnLengths = new List<int>();
ds.Tables["TableName"].Columns.Cast<DataColumn>().All((x) =>
{
{
ColumnLengths.Add( ds.Tables["TableName"].AsEnumerable().Select(y => y.Field<string>(x).Length).Max());
}
return true;
});
foreach (DataRow row in ds.Tables["TableName"].Rows)
{
for(int col=0;col<ds.Tables["TableName"].Columns.Count;col++)
{
SW.Write(row.Field<string>(ds.Tables["TableName"].Columns[col]).PadLeft(ColumnLengths[col] + (4 - (ColumnLengths[col] % 4))));
}
SW.WriteLine();
}