2016-10-25 2 views
0

Ich habe einen String Builder, ich bin zu erzeugen und, wenn ich es in der Konsole angezeigt wird, ist es formatiert perfekt:console Formatierung vs Textfile Formatierung

enter image description here

aber wenn ich versuche, die stringbuilder.ToString zu exportieren() in eine Textdatei, die Formatierung in der Übersetzung verloren geht:

enter image description here

foreach (var item in companyList.Keys) 
      { 
       reportForText.AppendLine(item.ToString()); 

       foreach (var user in companyList[item]) 
       { 


         reportForText.Append(String.Format("\n{0,-22}: ", user.Name)); 
         foreach (var group in user.GroupList) 
         { 
          reportForText.Append(String.Format("{0}\n", group).PadRight(25 + group.Length)); 
         } 
        } 
       } 
       reportForText.AppendLine(); 
       reportForText.AppendLine(); 
      } 
+1

Scheint, als wäre dies ein Mangel an '\ r',' \ n' und/oder '\ t', und stattdessen versuchen, eine Zeichenfolge manuell mit Leerzeichen in irgendeiner Weise zu erstellen? – gravity

+3

Gibt es irgendeinen Code, der daran beteiligt ist? Verstand es teilen? "Hier ist ein Text und hier ist ein anderer Text. Sie unterscheiden sich". Danke, das ist interessant. Was soll ich tun? –

+0

_ "Die Formatierung geht verloren in der Übersetzung" _ - Nein, nicht wirklich. Sie haben den Text nicht an erster Stelle "formatiert", außer um Zeichen in die Ausgabe aufzunehmen, die, wenn sie in einem sehr _speziellen_ Szenario dargestellt werden, das gewünschte Layout ergeben. Sie können Unterschiede zwischen Ausgabeszenarien minimieren oder sogar eliminieren, indem Sie Leerzeichen anstelle von Tabulatoren verwenden, immer "\ r \ n" 'für Zeilenumbrüche verwenden und immer eine Schriftart mit festen Leerzeichen verwenden. Letztendlich hängt die visuelle Darstellung Ihrer Daten jedoch immer davon ab, welche Software Sie zur Anzeige verwenden. –

Antwort

2

Nicht epad.exe unterstützt \n nicht als Newline, es unterstützt nur (soweit ich weiß) \r\n als Newline. Sie können das beheben, indem Sie Environment.NewLine anstelle von \n für eine neue Zeile verwenden (oder sogar direkt \r\n verwenden): "Eine Zeichenfolge, die" \ r \ n "für Nicht-Unix-Plattformen oder eine Zeichenfolge mit" \ n "für Unix-Plattformen enthält" . Heutzutage ist es kein "Windows oder Unix oder Mac", denn wie Sie sehen, hängt es vom Programm selbst ab und welche Zeichen es für "neue Zeilen" definiert hat, also IMO ist eine Frage zu Notepad.exe und wie es funktioniert und es sollte irrelevant sein, wenn Sie auf Unix oder nicht-Unix sind, trotz der Sprachunterstützung für Environment.NewLine. Dies wird durch das Windows Console unterstützt, das \n als Newline unterstützt, obwohl es eine "Nicht-Unix" -Plattform ist.

Ein nicht verwandtes Problem, mit dem Sie möglicherweise konfrontiert werden, ist die verwendete Schriftart. Sowohl Notepad.exe als auch Console verwenden standardmäßig Schriftarten mit fester Breite, so dass Ihr gesamter Abstand derzeit ausgerichtet ist. Aber wenn Sie zu einer Schriftart mit variabler Breite wechseln, werden Ihre Doppelpunkte und Dinge nicht mehr perfekt aneinander ausgerichtet.