我试图从datatable中编写一个文本文件,该文本文件稍后将由其他应用程序导入,因此,我需要导出文件中没有空行(在末尾或之间)。我使用了以下代码:
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();我的datatable有26条记录,当文件生成时,它有一条数据线,一条空行和另一条数据线等等,在最后一条数据线之后,它有3条空行。我怎样才能修改代码,使之只有数据链路,没有数据之间的空数据,没有最后3个空的?致以敬意,
LE:通过读取类似的线程,我找到了一个解决方案,但解决方案是同时使用streamwriter和streamreader,以便从将要生成的文件中删除不需要的数据(空行)。但我想知道是否有办法从一开始就得到所需的文件。
发布于 2016-02-29 08:47:31
为什么不使用File.WriteAllLines呢?它在幕后使用StreamWriter,但允许更简单的代码:
var fileLines = table.AsEnumerable()
.Select(row => String.Join(" ", row.ItemArray))
.Where(line => !String.IsNullOrWhiteSpace(line));
File.WriteAllLines(filePath, fileLines);但是你真的想用一个空格作为列分隔符吗?这很容易出错。只要一个字段值包含一个空格,它就会失败。
发布于 2016-02-29 09:05:58
我会尽量避免将空行添加到Stringbuild中。Stringclass应该提供适当的函数,可能是这样的:
String stringToTestIsEmpty = row[i].ToString();
//Check if it is not an empty line
if( ! String.IsNullOrWhiteSpace(stringToTestIsEmpty ))
{
resutl.Append(stringToTestIsEmpty);
}https://stackoverflow.com/questions/35695041
复制相似问题