Как записать отформатированную строку в текстовый файл - PullRequest
0 голосов
/ 20 сентября 2018

Я использую StringBuilder для форматирования моих строковых значений, как показано ниже

Номер студента: 3602

Зарегистрирован: 11.09.2008, 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 голосов
/ 20 сентября 2018

Согласно комментариям, не используйте жестко закодированный "\ n" для обозначения новой строки, если только вы не готовите данные для системы Unix

Сделайте это вместо:

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

AppendLine () может использоваться без каких-либо аргументов, чтобы просто вставить новую строку, и я делаю это выше, чтобы поместить новую строку в конец строки, с которой вы создали построитель строк.Может также сделать это:

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);

Наконец, каждый вызов AppendXXX () в строителе строк возвращаеттот же string Builder, так что вы можете позвонить так и сохранить некоторые набрав:

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

На самом деле, вы должны избегать смешивания конкатенации строк с + и 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
0 голосов
/ 20 сентября 2018

Различные ОС (Unix, Windows, Mac) используют разные символы новой строки ( Почему? ).

Вы явно используете \n, что по умолчанию для Linux, но его обработка в Windows будет зависеть от редактора, который вы используете для просмотра файла (блокнот покажет весь текст одной длинной строкой).Чтобы использовать системный символ по умолчанию для новых строк, используйте sb.AppendLine() или Environment.NewLine вместо \n.

0 голосов
/ 20 сентября 2018

Используйте sb.AppendLine вместо sb.Append, чтобы добавить текст в отдельные строки.Также, если вы пишете в файл и нуждаетесь в следующей строке, используйте Environment.NewLine вместо \ n.

...