vb.net - Replace Funktion (leere Zeilen) in html Datei löschen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von MK_CGN.

    vb.net - Replace Funktion (leere Zeilen) in html Datei löschen

    Hallo zusammen,
    ich habe ein Outlook Addin erstellt mit dem es möglich ist. oft-Vorlagen zu öffnen. Die oft-Datei (im Textformat html) ist u.a. mit Textmarken in Form %Testlink_01% bestückt. Von diesen Textmarken gibt es in einer Auflistung ca. 10 Stück.
    Je nach Vorgang müssen aber nicht alle 10 Links ersetzt und angezeigt werden, sondern nur die Links 1, 2, 3, 6 und 10. Die Textmarken zu den Links 4, 5, 7, 8 und 9 werden gelöscht. Allerdings wird nicht der Zeilenumbruch gelöscht.

    Es sieht derzeit so aus:
    Link 1
    Link 2
    Link 3


    Link 6



    Link 10

    Es sollte so aussehen:
    Link 1
    Link 2
    Link 3
    Link 6
    Link 10

    Ich habe schon folgende Replace Funktion probiert, aber die greift leider nicht

    Quellcode

    1. strbody=replace(strbody,"Link 4", vbcrlf & vbcrlf, vbcrlf)


    Hat jemand noch eine andere Idee oder kann eine Hilfestellung geben?
    Vielen Dank vorab

    Gruß
    MK
    @MK_CGN Probierma, einfach doppelte Zeilenvorschübe durch einfache zu ersetzen:

    VB.NET-Quellcode

    1. strbody = strbody.Replace(vbcrlf & vbcrlf, vbcrlf)
    Nun weiß ich nicht genau, welches Zeilenvorschubzeichen in HTML-Texten üblich ist, teste also auch mit vbCr und vbLf.
    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!
    Ein Versuch:

    VB.NET-Quellcode

    1. strBody = String.Join(vbNewLine, strBody.Split({vbCr,vbLf},StringSplitOptions.RemoveEmptyEntries))
    Ist nicht getestet (habe gerade kein VS zur Hand).
    Aber müsste eigentlich laufen und die Grundidee dürfte daraus hervorgehen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich mutmasse jetzt das die strbody-Variable mit der MailItem.Body Eigenschaft gefüllt wird (deshalb Zeilenumbruch = Environment.NewLine).

    VB.NET-Quellcode

    1. Dim strbody As String = "%Testlink_01%" & Environment.NewLine & _
    2. "%Testlink_02%" & Environment.NewLine & _
    3. "%Testlink_03%" & Environment.NewLine & _
    4. "%Testlink_04%" & Environment.NewLine & _
    5. "%Testlink_05%" & Environment.NewLine & _
    6. "%Testlink_06%" & Environment.NewLine & _
    7. "%Testlink_07%" & Environment.NewLine & _
    8. "%Testlink_08%" & Environment.NewLine & _
    9. "%Testlink_09%" & Environment.NewLine & _
    10. "%Testlink_10%" & Environment.NewLine
    11. strbody = strbody.Replace("%Testlink_04%" & Environment.NewLine, "")
    12. strbody = strbody.Replace("%Testlink_05%" & Environment.NewLine, "")
    13. strbody = strbody.Replace("%Testlink_07%" & Environment.NewLine, "")
    14. strbody = strbody.Replace("%Testlink_08%" & Environment.NewLine, "")
    15. strbody = strbody.Replace("%Testlink_09%" & Environment.NewLine, "")
    16. MessageBox.Show(strbody)


    Falls die strbody-Variable mit der MailItem.HTMLBody-Eigenschaft gefüllt wird, musst du die HTML-Zeilenumbrüche z.B. <br> ersetzten.
    Hallo Henry,
    danke für deine Unterstützung.
    strbody wird mit mmail.htmlgody gefüllt. Mmail ist definiert als Outlook.mailitem

    Im strbody ersetze ich wie gesagt, die Textmarken (Links) in der oft.Vorlage (im Format html).

    Wie bereits oben im ersten Beitrag beschrieben ist es jetzt allerdings so, dass nicht immer alle Links dargestellt werden, sondern auch mal Links nicht dargestellt werden sollen. Das funktioniert auch. Allerdings gibt es noch den Zeilenumbruch und das sieht optisch nicht so schön aus.

    Auch mit der Codezeile bekomme ich das leider nicht gelöst.

    Quellcode

    1. strbody=strbody.replace("<b>" & "<b>", "<b>")
    @MK_CGN Poste mal die betreffende Datei als ZIP:
    Erweiterte Antwort => Dateianhänge => Hochladen
    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!
    @MK_CGN Die Datei, in der Du die überflüssigen Leerzeilen entfernen willst.
    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!
    In der .oft sieht der Body so aus:

    HTML-Quellcode

    1. <p class=MsoNormal><span lang=DE style='font-family:"Verdana",sans-serif;
    2. mso-bidi-font-family:Arial;mso-ansi-language:DE'>Sehr geehrte/r %Anrede%
    3. %Nachname%,<o:p></o:p></span></p>
    4. <p class=MsoNormal><span lang=DE style='font-family:"Verdana",sans-serif;
    5. mso-bidi-font-family:Arial;mso-ansi-language:DE'>hier der Emailtext…<o:p></o:p></span></p>
    6. <p class=MsoNormal><span lang=DE style='font-family:"Verdana",sans-serif;
    7. mso-bidi-font-family:Arial;mso-ansi-language:DE'><o:p>&nbsp;</o:p></span></p>
    8. <p class=MsoNormal><b><u><span lang=DE style='font-family:"Verdana",sans-serif;
    9. mso-bidi-font-family:Arial;mso-ansi-language:DE'>Links:<o:p></o:p></span></u></b></p>
    10. <p class=MsoListParagraphCxSpFirst style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    11. class=MsoHyperlink><span style='mso-ascii-font-family:Calibri;mso-fareast-font-family:
    12. Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;text-decoration:
    13. none;text-underline:none'><span style='mso-list:Ignore'>-<span
    14. style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    15. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    16. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    17. bold;text-decoration:none;text-underline:none'><a href="URL_Link_01">%Label_Link_01%</a></span></span><span
    18. class=MsoHyperlink><span style='text-decoration:none;text-underline:none'><o:p></o:p></span></span></p>
    19. <p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    20. class=MsoHyperlink><span lang=DE style='mso-ascii-font-family:Calibri;
    21. mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:
    22. Calibri;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:none;
    23. text-underline:none'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    24. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    25. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    26. bold;text-decoration:none;text-underline:none'><a href="URL_Link_02">%Label_Link_02%</a><o:p></o:p></span></span></p>
    27. <p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    28. class=MsoHyperlink><span lang=DE style='mso-ascii-font-family:Calibri;
    29. mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:
    30. Calibri;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:none;
    31. text-underline:none'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    32. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    33. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    34. bold;text-decoration:none;text-underline:none'><a href="URL_Link_03">%Label_Link_03%</a><o:p></o:p></span></span></p>
    35. <p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    36. class=MsoHyperlink><span lang=DE style='mso-ascii-font-family:Calibri;
    37. mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:
    38. Calibri;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:none;
    39. text-underline:none'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    40. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    41. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    42. bold;text-decoration:none;text-underline:none'><a href="URL_Link_04">%Label_Link_04%</a><o:p></o:p></span></span></p>
    43. <p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    44. class=MsoHyperlink><span lang=DE style='mso-ascii-font-family:Calibri;
    45. mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:
    46. Calibri;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:none;
    47. text-underline:none'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    48. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    49. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    50. bold;text-decoration:none;text-underline:none'><a href="URL_Link_05">%Label_Link_05%</a><o:p></o:p></span></span></p>
    51. <p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    52. class=MsoHyperlink><span lang=DE style='mso-ascii-font-family:Calibri;
    53. mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:
    54. Calibri;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:none;
    55. text-underline:none'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    56. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    57. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    58. bold;text-decoration:none;text-underline:none'><a href="URL_Link_06">%Label_Link_06%</a><o:p></o:p></span></span></p>
    59. <p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    60. class=MsoHyperlink><span lang=DE style='mso-ascii-font-family:Calibri;
    61. mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:
    62. Calibri;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:none;
    63. text-underline:none'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    64. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    65. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    66. bold;text-decoration:none;text-underline:none'><a href="URL_Link_07">%Label_Link_07%</a><o:p></o:p></span></span></p>
    67. <p class=MsoListParagraphCxSpMiddle style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    68. class=MsoHyperlink><span lang=DE style='mso-ascii-font-family:Calibri;
    69. mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:
    70. Calibri;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:none;
    71. text-underline:none'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    72. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    73. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    74. bold;text-decoration:none;text-underline:none'><a href="URL_Link_08">%Label_Link_08%</a><o:p></o:p></span></span></p>
    75. <p class=MsoListParagraphCxSpLast style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
    76. class=MsoHyperlink><span lang=DE style='mso-ascii-font-family:Calibri;
    77. mso-fareast-font-family:Calibri;mso-hansi-font-family:Calibri;mso-bidi-font-family:
    78. Calibri;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:none;
    79. text-underline:none'><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    80. </span></span></span></span><![endif]><span class=MsoHyperlink><span lang=DE
    81. style='font-family:"Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:
    82. bold;text-decoration:none;text-underline:none'><a href="URL_Link_09">%Label_Link_09%</a><o:p></o:p></span></span></p>
    83. <p class=MsoNormal><span class=MsoHyperlink><span lang=DE style='font-family:
    84. "Verdana",sans-serif;mso-ansi-language:DE;mso-bidi-font-weight:bold;text-decoration:
    85. none;text-underline:none'><a href="URL_Link_10">%Label_Link_10%</a></span></span><o:p></o:p></p>
    86. <p class=MsoNormal><o:p>&nbsp;</o:p></p>

    Wenn du hier Zeilen entfernen willst, musst du ganze Paragraph-Elemente entfernen (alles zwischen ​<p und ​</p>
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Okay, das bedeutet, das geht nicht so einfach mit der replace Funktion? Wie könnte man dies dann vornehmen?

    Die Links die nicht benötigt werden, z. B. Testlink_04 ersetze ich ja vorab mit

    Quellcode

    1. strbody=replace(strbody,"Testlink_04", "")

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

    @MK_CGN Das ist eine eine Binärdatei in einem Outlook-Format.

    Keine Chance.
    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!
    Das kann ich nicht nachvollziehen, dass das nicht möglich sein soll...

    Zum einen werden bereits Textmarken in der oft-Vorlage ersetzt, wie zum Beispiel "Anrede, "Nachname" und auch die Links werden ersetzt. Jetzt geht es nur noch darum, dass die leeren Zeilen entfernt werden.

    Gibt es hier keine Möglichkeit den html-code an den entscheidenden Stellen zwischen

    Quellcode

    1. <p> und </p>
    zu löschen?
    Also unmöglich ist es nicht.
    Mein Vorschlag:
    1. In die Links die entfernt werden sollen etwas Eindeutiges einfügen. z.B. %LOESCHEN%
    2. Mit RegEx alle Paragraphen suchen. <p> </p>
    3. Alle RegEx-Matches (Paragraphen) die %LOESCHEN% enthalten entfernen
    Beispiel

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Text.RegularExpressions
    3. Imports Microsoft.Office.Interop
    4. Public Class Form1
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. Dim outlook1 As New Outlook.Application()
    7. Dim mitem As Outlook.MailItem = CType(outlook1.CreateItemFromTemplate(IO.Path.Combine(Application.StartupPath, "Test.oft"), Type.Missing), Outlook.MailItem)
    8. Dim Links() As String = New String() {"vb-paradise.de", "google.com", "MyHomePage.de", "%LOESCHEN%", "%LOESCHEN%", "facebook.com", "%LOESCHEN%", "%LOESCHEN%", "%LOESCHEN%", "microsoft.com"}
    9. Dim Anrede As String = "Herr Doktor Professor"
    10. Dim Nachname As String = "Anonymius"
    11. Dim input As String = mitem.HTMLBody
    12. input = input.Replace("%Anrede%", Anrede)
    13. input = input.Replace("%Nachname%", Nachname)
    14. input = input.Replace("%Label_Link_01%", Links(0))
    15. input = input.Replace("%Label_Link_02%", Links(1))
    16. input = input.Replace("%Label_Link_03%", Links(2))
    17. input = input.Replace("%Label_Link_04%", Links(3))
    18. input = input.Replace("%Label_Link_05%", Links(4))
    19. input = input.Replace("%Label_Link_06%", Links(5))
    20. input = input.Replace("%Label_Link_07%", Links(6))
    21. input = input.Replace("%Label_Link_08%", Links(7))
    22. input = input.Replace("%Label_Link_09%", Links(8))
    23. input = input.Replace("%Label_Link_10%", Links(9))
    24. Dim pattern As String = "<p\s*.+?\s*<\/p>"
    25. Dim options As RegexOptions = RegexOptions.Multiline
    26. For Each m As Match In Regex.Matches(input, pattern, options)
    27. If m.Value.Contains("%LOESCHEN%") Then
    28. 'Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index)
    29. input = input.Replace(m.Value, "")
    30. End If
    31. Next
    32. mitem.HTMLBody = input
    33. mitem.SaveAs(IO.Path.Combine(Application.StartupPath, "Test_neu.oft"), Type.Missing)
    34. End Sub
    35. End Class