我试图从一个数据表文本文件中编写一个文本文件,稍后将由其他应用程序导入该文本文件,因此我需要在导出的文件中没有空行(最后或之间) )。 我使用了以下代码:
DataTable table = FisierSoldata.dtSoldata;
var result = new StringBuilder();
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < table.Columns.Count; i++)
{
result.Append(row[i].ToString());
result.Append(i == table.Columns.Count - 1 ? "\n" : " ");
}
result.AppendLine();
}
StreamWriter objWriter = new StreamWriter(filePath, false);
objWriter.WriteLine(result.ToString());
objWriter.Close();
我的数据表有26条记录,当文件生成时,它有一个数据线,后跟一条空行和另一条数据线,依此类推,最后一个数据线后面有3条空行。 我如何修改代码,以便只有数据之间没有空数据的数据,而没有最后3个空数据? 的问候,
LE:我通过阅读一些类似的线程找到了解决方法,但解决方案是使用streamwriter和streamreader,以便从将生成的文件中删除不需要的数据(空行)。但我想知道是否有从一开始就根据需要获取文件的方法。
答案 0 :(得分:3)
为什么不使用File.WriteAllLines
,它在幕后使用StreamWriter
,但允许更简单的代码:
var fileLines = table.AsEnumerable()
.Select(row => String.Join(" ", row.ItemArray))
.Where(line => !String.IsNullOrWhiteSpace(line));
File.WriteAllLines(filePath, fileLines);
但你真的想用空格作为列分隔符吗?这非常容易出错。只要一个字段值包含空格,它就会失败。
答案 1 :(得分:0)
我会尽量避免将空行添加到Stringbuild。 Stringclass应该提供适当的函数,可能是这样的:
String stringToTestIsEmpty = row[i].ToString();
//Check if it is not an empty line
if( ! String.IsNullOrWhiteSpace(stringToTestIsEmpty ))
{
resutl.Append(stringToTestIsEmpty);
}