none
String Themen, Umbruch, Unterschied string zu String RRS feed

  • Frage

  • Hallo,

    wenn ich einen langen String zum formatieren habe, wie kann ich Zeilenumbrüche einpflegen, ohne dass diese nachher zu Gesicht kommen. Einfach im Code.

    In C++ gab es mal \

    in VB _ in C# ? Gibt es grobe Richtlinien, wann nimmt man was Klein Groß Stringbuilder Klasse Danke für den schellen Tipp.

     Grüße Andreas

     string help = String.Format("{0}\r\nReturnCode\t\t-{1}\r\nReturnDescription\t\t-{2}\r\nTrace_Level\t\t-{3}\r\n",
                                       telegram,
    																			 
     string help = string.Format("{0}\r\nReturnCode\t\t-{1}\r\nReturnDescription\t\t-{2}\r\nTrace_Level\t\t-{3}\r\n",
     telegram
    Mittwoch, 2. Februar 2011 17:56

Antworten

  • Hallo Andreas,

    gut, im Prinzip müsste man zwar noch wissen, was alles unter "nachher nicht zu Gesicht kommen" untergeordnet ist, aber ich kann schon mal allgemein sagen, dass man das, was Du darunter als Code gepostet hast schon auch in etwa so (in diesem Fall) benutzen kann. Vielleicht etwas abgewandelt:

       /// <summary>
      /// Ruft die fürdiese Umgebung definierte Zeichenfolge für einen 
      /// Zeilenumbruch ab. Eine Zeichenfolge für Nicht-Unix-Plattformen, die "\r\n"
      /// enthält, oder eine Zeichenfolge für Unix-Plattformen, die "\n" enthält.
      /// </summary>
      public string NL = Environment.NewLine;
    
      public Form1()
      {
       InitializeComponent();
    
       // Beispiel!
       string par1="Hilfe-Beschreibung:", par2="2", par3="3", par4="4";
       string help = String.Format( //
        Achtung \t ist etwas unsauber!
        "{1}{0}" +
        "ReturnCode\t\t-{2}{0}" +
        "ReturnDescription\t\t-{3}{0}" +
        "Trace_Level\t\t-{4}{0}",
        NL, par1, par2, par3, par4);
       MessageBox.Show(help);   
      }
    

    Nicht zu Gesicht bekommst Du die escapten Zeichen zum Beispiel in Ausgaben in Text-Controls oder im String-Debugger-Visualizer (und weitere wie Console.WriteLine, MessageBox.Show etc.). Beim Visualizer geht man während des Debuggens über die (string) Variable und es erscheint der Wert, nun klickt man auf die Lupe (Symbol) und kann den String ohne die Zeichen anschauen. Diese kann man auch selber programmieren.

    Eine grobe Regel bezüglich des StringBuilders habe ich einmal postuliert (kein MS):

           Ab 5 String-Konkatenationen den StringBuilder benutzen, sonst + Operator.

    Ergeben hatte sie sich schlicht aus Performance-Messungen zusammen mit Heuristiken.
    Aber man findet ähnliches aus in MSDN-Blogs o.a..
    Dennoch sollte man weiterhin wissen: Lesbarkeit ist in 90% der Fälle das wichtigste. ->CCD

    _______________
    Literatur u.a. auch:

    [Benutzerdefinierte Zahlenformatzeichenfolgen]
    http://msdn.microsoft.com/de-de/library/0c899ak8.aspx

    [Kombinierte Formatierung]
    http://msdn.microsoft.com/de-de/library/txafckwd.aspx

     [Gewusst wie: Auffüllen einer Zahl mit führenden Nullen]
    http://msdn.microsoft.com/de-de/library/dd260048.aspx


    Für mehrzeilige Strings gibt es übrigens in C# auch die Form:
        string mehrereZeilen =
        @"Erste Zeile
        Zweite Zeile
        Dritte Zeile";

    ciao Frank
    Mittwoch, 2. Februar 2011 19:27

Alle Antworten

  • string ist nur ein C#-Typalias für String, von daher ist es semantisch egal. StringBuilder verwendet man, um viele String-Operationen performant durchzuführen.

     

    Viele Grüße, Phil.

    Mittwoch, 2. Februar 2011 18:55
  • Hallo Andreas,

    > Wenn ich einen langen String zum formatieren habe, wie kann ich Zeilenumbrüche einpflegen, ohne dass diese nachher zu Gesicht kommen. Einfach im Code.

    Ich bin mir nicht sicher, ob ich Dich richtig verstehe. Eine Zeichenfolge muss noch in der selben Zeile mittels Anführungszeichen geschlossen werden. Andernfalls bekommt man den Kompilierfehler CS1010 angezeigt. In C# trennt man Zeichenfolgen so:

    string s = "Das ist eine sehr lange Zeichenfolge. " +
     "Die Zeichenfolge kann nicht auf die folgende Zeile " +
     "umgebrochen werden, aber man kann sie verketten.";
    
    

    P.S. Bei Verwendung von mehrzeiligen ad-literam Strings (so wie sie Frank in seinem Posting anführt), sind die Zeilenumbrüche Bestandteil des Strings und werden als solche natürlich angezeigt, sobald die Variable z.B. einer TextBox zugewiesen wird. Sie sind kein Mittel um eine bessere Code-Lesbarkeit zu erreichen.

    Gruss
    Marcel

    Mittwoch, 2. Februar 2011 19:04
    Moderator
  • Hallo Andreas,

    gut, im Prinzip müsste man zwar noch wissen, was alles unter "nachher nicht zu Gesicht kommen" untergeordnet ist, aber ich kann schon mal allgemein sagen, dass man das, was Du darunter als Code gepostet hast schon auch in etwa so (in diesem Fall) benutzen kann. Vielleicht etwas abgewandelt:

       /// <summary>
      /// Ruft die fürdiese Umgebung definierte Zeichenfolge für einen 
      /// Zeilenumbruch ab. Eine Zeichenfolge für Nicht-Unix-Plattformen, die "\r\n"
      /// enthält, oder eine Zeichenfolge für Unix-Plattformen, die "\n" enthält.
      /// </summary>
      public string NL = Environment.NewLine;
    
      public Form1()
      {
       InitializeComponent();
    
       // Beispiel!
       string par1="Hilfe-Beschreibung:", par2="2", par3="3", par4="4";
       string help = String.Format( //
        Achtung \t ist etwas unsauber!
        "{1}{0}" +
        "ReturnCode\t\t-{2}{0}" +
        "ReturnDescription\t\t-{3}{0}" +
        "Trace_Level\t\t-{4}{0}",
        NL, par1, par2, par3, par4);
       MessageBox.Show(help);   
      }
    

    Nicht zu Gesicht bekommst Du die escapten Zeichen zum Beispiel in Ausgaben in Text-Controls oder im String-Debugger-Visualizer (und weitere wie Console.WriteLine, MessageBox.Show etc.). Beim Visualizer geht man während des Debuggens über die (string) Variable und es erscheint der Wert, nun klickt man auf die Lupe (Symbol) und kann den String ohne die Zeichen anschauen. Diese kann man auch selber programmieren.

    Eine grobe Regel bezüglich des StringBuilders habe ich einmal postuliert (kein MS):

           Ab 5 String-Konkatenationen den StringBuilder benutzen, sonst + Operator.

    Ergeben hatte sie sich schlicht aus Performance-Messungen zusammen mit Heuristiken.
    Aber man findet ähnliches aus in MSDN-Blogs o.a..
    Dennoch sollte man weiterhin wissen: Lesbarkeit ist in 90% der Fälle das wichtigste. ->CCD

    _______________
    Literatur u.a. auch:

    [Benutzerdefinierte Zahlenformatzeichenfolgen]
    http://msdn.microsoft.com/de-de/library/0c899ak8.aspx

    [Kombinierte Formatierung]
    http://msdn.microsoft.com/de-de/library/txafckwd.aspx

     [Gewusst wie: Auffüllen einer Zahl mit führenden Nullen]
    http://msdn.microsoft.com/de-de/library/dd260048.aspx


    Für mehrzeilige Strings gibt es übrigens in C# auch die Form:
        string mehrereZeilen =
        @"Erste Zeile
        Zweite Zeile
        Dritte Zeile";

    ciao Frank
    Mittwoch, 2. Februar 2011 19:27
  • Hallo Zusammen,

    Danke an Alle für die schnellen Antworten. Richtig erkannt und ausreichend.

     

    Grüße Andreas

    Mittwoch, 2. Februar 2011 19:52