如何在文本文件中写入格式化的字符串

时间:2018-09-20 08:36:16

标签: c# .net string text stringbuilder

我正在使用StringBuilder来格式化我的字符串值,如下所示

  

学生人数:3602

     

注册时间:2018年9月11日上午12:00:00

     

注册人数:0

但是当我使用以下代码将其写入文本文件时

using (StreamWriter sw = new StreamWriter(@"LocaltempPath\Sheet.txt"))
{
    sw.WriteLine(sb.ToString());
}

我错过了整个格式,而不是上面显示的格式,而是将值复制到了一行文本文件中!写入文本文件时如何保留格式?

更新:我的StringBuilder代码

 StringBuilder sb = new StringBuilder("Student Number: " + StId);
 sb.Append("\n");
 sb.Append("Registered On: " + regdate);
 sb.Append("\n");
 sb.Append("Enrollment No: " + regnumber);
 sb.Append("\n");

3 个答案:

答案 0 :(得分:1)

使用sb.AppendLine而不是sb.Append将文本添加到单独的行。 另外,如果要写入文件并需要下一行,请使用Environment.NewLine而不是\ n。

答案 1 :(得分:0)

根据评论,除非您正在为unix系统准备数据,否则请勿使用硬编码的“ \ n”表示换行符。

执行此操作:

StringBuilder sb = new StringBuilder("Student Number: " + StId);
sb.AppendLine();
sb.AppendLine("Registered On: " + regdate);
sb.AppendLine("Enrollment No: " + regnumber);

AppendLine()可以不带任何参数而用于添加换行符,而我在上面这样做是为了在创建stringbuilder的字符串的末尾添加新行。也可以这样做:

StringBuilder sb = new StringBuilder();
sb.AppendLine("Student Number: " + StId);
sb.AppendLine("Registered On: " + regdate);
sb.AppendLine("Enrollment No: " + regnumber);

如果您想进一步控制日期等格式:

StringBuilder sb = new StringBuilder();
sb.AppendLine("Student Number: " + StId);
sb.AppendFormat("Registered On: {0:yyyy-MM-dd HH:mm:ss.fff}\r\n", regdate);
sb.AppendLine("Enrollment No: " + regnumber);

最后,在stringbuilder上对AppendXXX()的每次调用都会返回相同的stringbuilder,因此您可以像这样调用并保存一些输入内容:

StringBuilder sb = new StringBuilder();
sb.Append("Student Number: ").AppendLine(StId)
  .Append("Registered On: ").AppendLine(regdate);
  .Append("Enrollment No: ").AppendLine(regnumber);

确实,您应该避免将字符串连接与+和stringbuilder混合使用-如果您仅使用stringbuilder进行大量的字符串构建,这样做会更加有效。但这可能不会使您的代码更具可读性

就可读代码而言,您可能还想知道您可以执行以下操作:

StringBuilder sb = new StringBuilder();
sb.AppendLine($"Student Number: {StId}");
sb.AppendLine($"Registered On: {regdate}");
sb.AppendLine($"Enrollment No: {regnumber}");

在这个简单的示例中,它并没有多大帮助,但对于连接很多东西的字符串确实可以起到帮助:

$"Student Number: {StId}, Registered On: {regdate}, Enrollment No: {regnumber}"
//instead of
"Student Number: " + StId + ", Registered On: " + regdate + ", Enrollment No: " + regnumber

答案 2 :(得分:0)

不同的操作系统(Unix,Windows,Mac)使用不同的换行符(Why?)。

您正在显式使用\n,这是Linux的默认设置,但是Windows上的处理方式取决于您用来查看文件的编辑器(记事本将所有文本显示为一长行)。要将系统默认字符用于换行符,请使用sb.AppendLine()Environment.NewLine而不是\n