如何在文本文件中写入格式化字符串
How to write formatted string in text file
我正在使用 StringBuilder
来格式化我的字符串值,如下所示
Student Number: 3602
Registered On: 9/11/2018 12:00:00 AM
Enrollment number: 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");
使用 sb.AppendLine 而不是 sb.Append 将文本添加到单独的行中。
此外,如果您正在写入文件并需要下一行,请使用 Environment.NewLine 而不是 \n.
根据评论,不要使用硬编码的“\n”来表示换行符,除非您正在为 unix 系统准备数据
改为这样做:
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() returns 相同的 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
不同的操作系统(Unix、Windows、Mac)使用不同的换行符(Why?)。
您正在明确使用 \n
,这是 Linux 默认设置,但它在 Windows 上的处理将取决于您用来查看文件的编辑器(记事本将显示所有文本为一长行)。要为新行使用系统默认字符,请使用 sb.AppendLine()
或 Environment.NewLine
而不是 \n
。
我正在使用 StringBuilder
来格式化我的字符串值,如下所示
Student Number: 3602
Registered On: 9/11/2018 12:00:00 AM
Enrollment number: 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");
使用 sb.AppendLine 而不是 sb.Append 将文本添加到单独的行中。 此外,如果您正在写入文件并需要下一行,请使用 Environment.NewLine 而不是 \n.
根据评论,不要使用硬编码的“\n”来表示换行符,除非您正在为 unix 系统准备数据
改为这样做:
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() returns 相同的 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
不同的操作系统(Unix、Windows、Mac)使用不同的换行符(Why?)。
您正在明确使用 \n
,这是 Linux 默认设置,但它在 Windows 上的处理将取决于您用来查看文件的编辑器(记事本将显示所有文本为一长行)。要为新行使用系统默认字符,请使用 sb.AppendLine()
或 Environment.NewLine
而不是 \n
。