In einem String Anführungszeichen darstellen (PDF Creator)

  • VB.NET

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

    In einem String Anführungszeichen darstellen (PDF Creator)

    Hallo,

    ich benötige noch etwas Hilfe...
    Habe es jetzt stundenlang probiert, gegoogled, ...
    Ich bekomme es einfach nicht hin...

    Ich würde gerne mit dem PDF Creator aus Dateien PDFs per Skript erstellen - u.a. aus mehreren Dateien 1 PDF erstellen.
    Aus einer Datei 1 PDF erstellen habe ich hinbekommen (Zeile(59-62)).
    Mit dem Erstellen von 1 PDF aus mehreren Dateien habe ich Schwierigkeiten.

    In Zeile 68 muss ich folgenden String erzeugen:

    VB.NET-Quellcode

    1. " MergeFiles /OutputFile="C:\b\zusammen.pdf" "C:\a\Datei1.txt" "C:\a\Datei2.txt""

    Unter p.StartInfo.Arguments liegt aber vor:

    VB.NET-Quellcode

    1. " MergeFiles /OutputFile=C:\b\zusammen.pdf C:\a\Datei1.txt C:\a\Datei2.txt"


    Ich bekomme es einfach nicht hin in dem String Anführungszeichen darzustellen - in Zeile 61 habe ich es geschafft...

    Ich bitte um Hilfe...

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Imports System.IO
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim i As Integer = 0, k As Integer = 0, pdfName As String, ext(6) As String, ListeMerged As String, d As Integer = 0
    6. Dim Liste As New List(Of String), anzL As Integer = 0, AnzdateiOkay As Integer = 0, anzDateien As Integer = 0
    7. Dim pfadEinlesen As String = "C:\a\"
    8. Dim pfadFertig As String = "C:\b\"
    9. Dim ordnereinlesen As New DirectoryInfo(pfadEinlesen)
    10. 'Dim file As FileInfo
    11. Dim files = ordnereinlesen.GetFiles()
    12. Dim p As Process = New Process
    13. Dim dateiOkay As Boolean = False
    14. ext(0) = "pdf"
    15. ext(1) = "doc"
    16. ext(2) = "txt"
    17. ext(3) = "xls"
    18. ext(4) = "jpg"
    19. ext(5) = "jpeg"
    20. ext(6) = "tif"
    21. pdfName = InputBox("Wie soll das pdf heißen?")
    22. 'Drucker setzen
    23. SetDefaultPrinter("PDFCreator")
    24. 'Anzahl verwertbarer Dateien zählen, Liste erzeugen
    25. For Each file In files
    26. For k = 0 To 6
    27. If file.Extension.ToLower.Contains(ext(k)) Then
    28. Liste.Add(file.FullName.ToString())
    29. anzDateien += 1
    30. Exit For
    31. End If
    32. Next
    33. Next
    34. anzL = Liste.Count
    35. 'Fehler vorhanden?
    36. For d = 0 To anzL - 1
    37. dateiOkay = False
    38. For k = 0 To 6
    39. If Liste.ElementAt(d).Contains(ext(k)) Then
    40. 'datei okay
    41. dateiOkay = True
    42. Exit For
    43. End If
    44. Next
    45. If dateiOkay = True Then
    46. AnzdateiOkay += 1
    47. End If
    48. Next
    49. If AnzdateiOkay = anzL Then
    50. If anzL = 1 Then
    51. ListeMerged = Liste.ElementAt(0)
    52. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    53. p.StartInfo.FileName = "C:\Program Files\PDFCreator\pdfcreator-cli.exe"
    54. p.StartInfo.Arguments = " PrintFile /File=""" & ListeMerged & """ /OutputFile=""" & pfadFertig & pdfName & ".pdf"""
    55. p.Start()
    56. End If
    57. If anzL > 1 Then
    58. ListeMerged = String.Join(" ", Liste)
    59. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    60. p.StartInfo.FileName = "C:\Program Files\PDFCreator\pdfcreator-cli.exe"
    61. p.StartInfo.Arguments = " MergeFiles /OutputFile=" & pfadFertig & pdfName & ".pdf" & " " & ListeMerged
    62. p.Start()
    63. End If
    64. Else
    65. MessageBox.Show("Mindestens 1 Datei kann nicht konvertiert werden.")
    66. Exit Sub
    67. End If
    68. 'alten Drucker setzen
    69. SetDefaultPrinter("Canon MX490 series Printer")
    70. End Sub
    71. <DllImport("winspool.drv", CharSet:=CharSet.Auto, SetLastError:=True)>
    72. Public Shared Function SetDefaultPrinter(Name As String) As Boolean
    73. End Function
    74. End Class
    Einfach mit einem weiterem Anführungzeichen "escapen":

    VB.NET-Quellcode

    1. "C:\b\zusammen.pdf"" ""C:\a\Datei1.txt"" ""C:\a\Datei2.txt"""


    Hättest du aber auch selbständig recherchieren können !
    [GELÖST] Anführungszeichen darstellen in String
    Hallo kwon,

    um Texte mit Leerzeichen zu quoten verwende ich Hilfsfunktionen.

    1. Eine String-Klasse um die VB-Funktionen Left und Right nachzubauen:

    VB.NET-Quellcode

    1. Public Class ClsString
    2. ' Left in VB.NET nachgebaut
    3. Public Function Left(ByVal sText As String,
    4. ByVal nLen As Integer) As String
    5. If nLen > sText.Length Then nLen = sText.Length
    6. Return (sText.Substring(0, nLen))
    7. End Function
    8. ' Right in VB.NET nachgebaut
    9. Public Function Right(ByVal sText As String,
    10. ByVal nLen As Integer) As String
    11. If nLen > sText.Length Then nLen = sText.Length
    12. Return (sText.Substring(sText.Length - nLen))
    13. End Function
    14. End Class


    2. Eine globale Funktion "Add_Quoted"

    VB.NET-Quellcode

    1. Public Function Add_Qouted(ByVal strValue As String, Optional ByVal Allways As Boolean = False) As String
    2. Dim cQuoted As String
    3. Dim myString As New ClsString
    4. cQuoted = Chr(34)
    5. If InStr(1, strValue, " ") > 0 Or Allways = True Then
    6. If myString.Left(strValue, 1) <> cQuoted Then
    7. strValue = cQuoted & strValue
    8. End If
    9. If myString.Right(strValue, 1) <> cQuoted Then
    10. strValue = strValue & cQuoted
    11. End If
    12. End If
    13. Add_Qouted = strValue
    14. End Function


    Der Aufruf erfolgt dann ganz einfach:

    VB.NET-Quellcode

    1. Dim sTest As String = Add_Qouted("Mein Test")


    Vielleicht löst das ja dein Problem.

    Gruß Achilleus
    InStr ist aber VB6, und Add_Qouted ist falsch geschrieben.
    cQuoted = Chr(34) -> cQuoted = """"
    :rolleyes:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo VaporiZed,

    mit InStr gebe ich dir recht, besser wäre wohl:

    VB.NET-Quellcode

    1. ​If strValue.IndexOf(" ") > -1 Or Allways = True Then


    Ups, und das Chr(34) auch aus VB6 stammt, war mir gar nicht bewusst. ;(

    Danke für den Hinweis. Die Hilfsfunktion nutzte ich schon seit Urzeiten und hatte immer gute Dienste geleistet.
    Ich habe diese auch gleich abgeändert. Danke für den Hinweis. :thumbup:

    Achilleus schrieb:

    ​If strValue.IndexOf(" ") > -1 Or Allways = True Then
    Da bekomme ich leichte Augenschmerzen
    Besser wäre

    VB.NET-Quellcode

    1. ​If Allways OrElse strValue.IndexOf(" ") > -1 Then
    Es ist schneller ein Boolean zu testen, als einen String zu durchsuchen.

    Aber die Schreibweise von ​Allways tut mir noch mehr weh.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo,

    danke für die Antworten!!

    Allerdings komme ich noch nicht klar...

    VB.NET-Quellcode

    1. For i = 0 To anzL - 1
    2. pfad = Liste.ElementAt(i)
    3. c = $"""{pfad}"""
    4. ListeMitPfaden.Add(c)
    5. Next

    Habe Zeichenfolgeninterpolation online gefunden und herumprobiert (siehe obiges).
    Allerdings ist, nachdem ich den Inhalt von ListeMitPfaden verbunden habe, das der Inhalt:

    VB.NET-Quellcode

    1. ListeMerged """C:\a\Datei1.txt"" ""C:\a\Datei2.txt"" ""C:\a\Datei3.txt"""


    Es wäre toll, wenn mir jemand helfen könnte...

    kwon schrieb:

    Allerdings ist, nachdem ich den Inhalt von ListeMitPfaden verbunden habe, das der Inhalt
    Das ist der Inhalt, den du im Debugger siehst, weil der zur Kennzeichnung des Strings die Quotes dazu fügt.
    Wenn du den String ausgibst in eine Datei oder mit Debug.Print sind die äußeren Quotes weg.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --