Split String (1-dimensionales Array von String kann nicht in String konvertiert werden)

  • VB.NET

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

    Split String (1-dimensionales Array von String kann nicht in String konvertiert werden)

    Hallo zusammen

    wenn ich den Inhalt einer Multiline Textbox in eine Mail übergebe

    VB.NET-Quellcode

    1. Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=" & meldung)

    wird mir der Text als "Bandwurm" angezeigt (die Zeilenschaltungen sind weg)

    Wenn ich nun den Text splitte (die eingegeben Zeilenumbrüche sollen mitgegeben werden)

    VB.NET-Quellcode

    1. Dim sArray As String()
    2. sArray = Split(MassnTextBox.Text, vbCrLf)

    erhalte ich die Fehlermeldung: 1-dimensionales Array von String kann nicht in String konvertiert werden

    Wie kann ich das umgehen?

    Besten Dank für eure Hilfe

    VB.NET-Quellcode

    1. Dim MassnTextBox As String = "lökhjlöihj" & vbCrLf & "löjkhlöjkh"
    2. Dim sArray As String()
    3. sArray = Split(MassnTextBox, vbCrLf)

    Geht doch.
    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!
    Wie sieht denn Dein MassnTextBox.Text aus?
    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!
    Da ist (bis auf die Zeilenumbrüche) unformatierter Text drin:

    Hier steht ein Eintrag bzgl. irgendetwas.

    dann kann nach einer oder mehreren Zeilenschaltungen weiterer Text folgen

    dann kann nochmals ein Zeilenumbruch folgen

    wenn ich das nun so Outlook übergebe

    VB.NET-Quellcode

    1. Dim meldung As String
    2. meldung = MassnTextBox.Text
    3. Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=" & meldung)


    erscheint der Text logischerweise so: Hier steht ein Eintrag bzgl. irgendetwas.dann kann nach einer oder mehreren Zeilenschaltungen weiterer Text folgendann kann nochmals ein Zeilenumbruch folgen


    darum will ich bei den Zeilenumbrüchen (vbCrLf) den Text splitten
    Schreib doch bitte mal Deine "Wunschtext"-Zeilen von nach dem Splitten per Hand auf.
    Irgendwo steht einer bei mir auf der Leitung.
    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!

    RodFromGermany schrieb:

    Irgendwo steht einer bei mir auf der Leitung.

    Denke auch , dass der Fehler nicht beim Split liegt, da beide Versionen:

    VB.NET-Quellcode

    1. Dim sArray As String() = Split(MassnTextBox, vbCrLf)
    2. Dim sArray() As String = Split(MassnTextBox, vbCrLf)

    vollkommenn richtig sind.

    Ich vermute eher, dass er Outlook den Array bei Process.Start mitgibt, und dass dort (natürlich) der Fehler auftritt
    das ist wie oben beschrieben:

    hier steht Text und Text und Text.

    dann nach einer Zeilenschaltung weiterert Text usw.

    dann ev wieder eine Zeilenschaltung und Text.

    wenn ich das nun so übergebe:

    VB.NET-Quellcode

    1. Dim meldung As String
    2. meldung = MassnTextBox.Text
    3. Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=" & meldung)


    dann sieht der Text ja logischerweise so aus:

    hier steht Text und Text und Text.dann nach einer Zeilenschaltung weiterert Text usw.dann ev wieder eine Zeilenschaltung und Text

    mit dem Split möchte ich den Inhalt der Multiline Textbox dem Mail so wie er in der Textbox steht übergeben:

    hier steht Text und Text und Text.

    dann nach einer Zeilenschaltung weiterert Text usw.

    dann ev wieder eine Zeilenschaltung und Text.


    wenn ich das nu so mache:

    VB.NET-Quellcode

    1. Dim sArray() As String
    2. sArray = Split(MassnTextBox.Text, vbCrLf)

    kommt der Fehler: 1-dimensionales Array von String kann nicht in String konvertiert werden

    Die Farbe Rot ist den Moderatoren vorbehalten
    * Farbe geändert *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Dann poste doch mal bitte die komplette Fehlermeldung.
    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!
    wenn ich den Inhalt an eine andere MultiLine Textbox übergeben will (das habe ich zu Testzwecken auch versucht) kommt folgender Fehler:

    Der Wert vom Typ "1-dimensionales Array von String" kann nicht in "String" konvertiert werden.


    Bei der Übergabe an Outlook

    VB.NET-Quellcode

    1. Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=" & sArray)


    Der &-Operator ist für die Typen "String" und "1-dimensionales Array von String" nicht definiert.

    Die Farbe Rot ist den Moderatoren vorbehalten
    * Farbe geändert *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Du meinst also:

    Ich habe folgende Programmzeile geschrieben:

    VB.NET-Quellcode

    1. Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=" & sArray)

    und die Entwicklungsumgebung meint dazu
    Der &-Operator ist für die Typen "String" und "1-dimensionales Array von String" nicht definiert.


    Dann sage ich Dir:
    Schreib doch einfach

    VB.NET-Quellcode

    1. Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=" & sArray(0))

    in Deinen Code. :D
    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!
    Ich muss gestehen ich bin noch nicht einmal auf die Idee gekommen eine eMail per Process.Start auf den Weg zu bringen, aber es geht tatsächlich. Allerdings eher für 1-Zeiler, denn es werden bei dem Code:

    VB.NET-Quellcode

    1. Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=1.Zeile der Nachricht" & vbcrlf & "2. Zeile der Nachricht")

    die Zeilenvorschübe nicht ausgewertet und alles wird direkt hintereinander geschrieben.

    Arbeite lieber direkt mit den Klassen im System.Net.Mail Namensraum. Zum Beispiel versendet folgender Code 2 Zeilen über GoogleMail:

    VB.NET-Quellcode

    1. Dim mailClient As New SmtpClient()
    2. mailClient.Host = "smtp.googlemail.com"
    3. mailClient.Port = 587
    4. mailClient.EnableSsl = True
    5. ' create message
    6. Dim message As New MailMessage("fromMe@somewhere.com", "toAdresse@gmx.net", "Betreff Test", "dies ist ein test" & vbCrLf & "rest der nachricht")
    7. mailClient.Credentials = New Net.NetworkCredential("meinUser@googlemail.com", "meinPasswort")
    8. mailClient.Send(message)

    Allerdings muss man schon den Namen des Hostservers und den Port seines Mail-Providers wissen. Dafür muss aber auch kein externer Prozess gestartet werden ...
    Korrekt. Da musst Du Dir den Text mit vbCrLf's wieder in eine Zeile schreiben.

    VB.NET-Quellcode

    1. Dim txt as String = ""
    2. For Each Line As String In Textbox.Lines
    3. txt &= Line & vbLf
    4. Next
    5. Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=" & txt)
    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!
    So, habe mich heute nochmals da rangesetzt und eure Ratschläge (richtig)? umgesetzt

    VB.NET-Quellcode

    1. Dim sArray() As String
    2. sArray = Split(MassnTextBox.Text, vbCrLf)
    3. Dim txt As String = ""
    4. For Each Line As String In sArray
    5. txt &= Line & vbCrLf
    6. Next
    7. MsgBox(txt) Process.Start("mailto:email@domain.com?subject=DeinBetreff&body=" & txt)


    die Ausgabe in der MsgBox ist richtig formatiert:

    Zeile1

    Zeile2

    Zeile3


    die Ausgabe im Mail ist: Zeile1Zeile2Zeile3

    was mache ich da noch falsch bzw. wieso der Unterschied?
    ahoi,

    kann mich auch irren aber ein mailtext ist doch eigentlich html formatiert oder ?
    für einen zeilenumbruch müsstest du ein <br /> reinbringen
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de