Frage zu Anführungszeichen in String

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Frage zu Anführungszeichen in String

    Moin!

    ich möchte einen String aufbauen der eine Vielzahl von Anführungszeichen beinhaltet.

    Das Ergebnis ist nachher soetwas wie:

    (command "_-PLOT" "_No" "PdfRaster1000x1000" "" "_DWG To PDF_NoPreview.pc3" "P:\KARTEN\Sielkataster_1000_PDF\Neu\2575_2020-03-26.pdf" "_No" "_Yes" "")


    Hier meine Zeile:

    VB.NET-Quellcode

    1. Dim CommandString As String = String.Format(""_-PLOT" "_No" "{0}" {1} {2} "{3}" "_No" "_Yes"", CurrentLayout, LeerCommand, LeerCommand, OutputFile4PDF.Replace("\", "\\"))


    Es wird der Ausdruck hinter string.format angemerkt mit



    Kann mir einer weiterhelfen?

    Gruß Jan
    @jan99

    VB.NET-Quellcode

    1. MessageBox.Show("""a""")
    Da muss dann """ stehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Morrison schrieb:

    Hi!
    Entweder man "escaped" die Anführungszeichen, oder man setzt die Anführungszeichen in Anführungszeichen..
    ..man könnte auch ein Array aus Strings erstellen und als zusätzliches Zeichen das Anführungszeichen welches dann, wenn benötigt, gesetzt wird..
    Ähm - weder noch, aber so ähnlich.
    Die Regel ist einfach: Man escaped das ", indem man es verdoppelt.
    Aber vielleicht definiere ich erstmal das Problem: In VB sind String-Literale gekennzeichnet, indem sie in DoubleQuotes - " umschlossen werden.

    VB.NET-Quellcode

    1. dim s = "Dies ist ein String"
    2. dim s2 = Dies ist keiner. 'wird daher nicht kompilieren
    Wenn nun der String selbst wiederum DoubleQuotes enthalten soll, geht das natürlich nicht, weil der Compiler denkt, an der Stelle sei der String zuende.
    Daher muss man DoubleQuotes innerhalb von String-Literalen escapen.
    Die Regel ist einfach: Man escaped das ", indem man es verdoppelt.

    Beispiel:

    VB.NET-Quellcode

    1. dim s = "Dies: "" - ist ein escaptes DoubleQuote im String-Literal"
    2. dim s2 = "Dies: " - ist ein unescaptes DoubleQuote im String-Literal" 'wird daher nicht kompilieren

    Bei komplizierten Literalen, mit mehreren DoubleQuotes wird das ganz schön unübersichtlich und schlecht leserlich.
    Wenn bekannt ist, wie das Literal unescaped rauskommen soll, dann selectiere einfach seinen Inhalt (also ohne die äusseren ", und verwende das TextErsetzungs-Feature des Editors, ersetze innerhalb der Selection " zu ""

    Neu

    @jan99

    Wenn man sehr viele solcher Anführungszeichen verwendet, dann ist es u.U. einfacher diese durch einfache Anführungszeichen zu ersetzen und zum Schluss mit Replace() die einfachen Anführungszeichen durch doppelte zu ersetzen. Vorausgesetzt, man hat keine einfachen Anführungszeichen als Inhalt ;-).

    Damit bleibt der Quellcode gut lesbar (besser als Dim Variable as String =""""irgendwas""""+vbcrlf+""""nochwas""""

    Hier ein Beispiel:

    VB.NET-Quellcode

    1. Dim SendString As String
    2. Dim TimeStamp As String = Now().ToString("yyyy-MM-ddTHH:mm:ss")
    3. SendString = "<OTA_HotelAvailRQ xmlns='http://www.opentravel.org/OTA/2003/05' Version='3.30' TimeStamp='" + TimeStamp + "' Target='Production' PrimaryLangID='en'>"
    4. SendString += OTA_POS() 'Login und Zugangsdaten
    5. SendString += "<AvailRequestSegments>"
    6. SendString += "<AvailRequestSegment ResponseType='RateInfoDetails' >" 'InfoSource='MyPersonalStay'
    7. SendString += "<StayDateRange Start='" + Now().ToString("yyyy-MM-dd") + "' End='" + Now().AddDays(365).ToString("yyyy-MM-dd") + "'/>"
    8. SendString += "</AvailRequestSegment>"
    9. SendString += "</AvailRequestSegments>"
    10. SendString += "</OTA_HotelAvailRQ>"
    11. Sendstring = Sendstring.Replace("'", """")

    Liebe Grüße
    Roland Berghöfer

    Bei der Entwicklung meiner Anwendung(en) steht nicht "Code nach .NET Lehrbuch" im Vordergrund, sondern eine stabile und brauchbare Anwendung die der Anwender ordentlich verwenden kann. Usability für den Kunden und Supportbarkeit beim Kunden stehen an oberster Stelle. Das spiegelt sich auch in meinen Fragen und Antworten wider. Bitte verzeiht, dass meine VB.NET Quellcodes etwas VB6-lastig sind aber das ist für das funktionierende Endergebnis nicht wirklich relevant.

    Neu

    xored schrieb:

    ControlChars.Quote
    Dieser Bestandteil im / als Quelltext ist sehr lang und damit unübersichtlich.
    Der Quelltext von @dive26 hingegen lässt sich flüssig lesen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!