Nachdem ich vor kurzem mal auf mein Problem mit der COM-Programmierung hingewiesen habe und ein paar Anregungen bekommen habe, bin ich nun einen Schritt weiter.
1. Ich habe eine Möglichkeit gefunden den Text aus einer PDF mit dem Tool pdftotext in eine Textdatei umzuwandeln. Bei meiner Testpdf (die übrigens auch als Referenz für zukünftige Auftragsbestätigungen genommen werden kann) hat das super hingehauen.
Dazu genügt es einfach folgenden Code zu verwenden:
pdftotext -layout datei1.pdf ausgabe1.txt
2. Nun sind die ABs zwar in einer grafischen Logik dargestellt, aber mit dem Computer nur mühsam zu verarbeiten. Doch für was gibt es denn Reguläre Ausdrücke? Richtig um Muster zu finden. Die von mir benötigen Daten folgen glücklicherweise immer einem bestimmten Muster. Zum Beispiel ein Datum ist immer gleich aufgebaut und die Artikelnummern. Doch leider sind RegEx sehr schwer zu kapieren. Durch eine Googlesuche nach "Regex Generator" bin ich auf diese tolle Seite gestoßen: txt2re
Sie mag auf den ersten Blick sehr verwirrend sein, doch auf den zweiten Blick ist es einfach nur genial. Man gibt oben eine Zeile ein und kann unten per Mausklick auswählen, welche Muster man verarbeiten möchte und das Ganze dann auch noch in einer von vielen verbreiteten Sprachen.
Den zweiten Punkt werde ich morgen noch ausführlich testen in VB.NET und dann hoffentlich endlich ein Ergebnis bekommen. Wenn ich dann diese Datei habe, wird ein Export nicht mehr allzu schwer werden.
3. Ich muss nun noch nach der Syntax zum Lesen einer Datei in VB.NET googlen und das schreiben in der Datei. In C und PHP wüsste ich es noch einigermaßen, aber grafisch aufbereitet ist das ja immer etwas anders.
//Update:
Nun hab ich es endlich auch geschafft, was zu coden:
Imports System.IO Imports System.Text.RegularExpressions Module Module1 Dim objDateiMacher As StreamWriter Dim objDateiLeser As StreamReader Sub Pdf2Txt(ByVal pdfFile As String, ByVal txtFile As String) Dim arguments As String = "-layout" & " " & pdfFile & " " & txtFile 'make sure to provide the path with the pdfFile and the txtFile System.Diagnostics.Process.Start("c:\xpdf\pdftotext.exe", arguments) End Sub Sub Main() Call Pdf2Txt("C:\xpdf\datei\eingabe.pdf", "C:\xpdf\datei\ausgabe.txt" ) Dim txt As String objDateiLeser = New StreamReader("C:\xpdf\datei\ausgabe.txt" ) Dim re1 As String = ".*?" 'Non-greedy match on filler Dim re2 As String = "(BL[0-9]{7})" 'Word 1 Dim r As Regex = New Regex(re1 + re2, RegexOptions.IgnoreCase Or RegexOptions.Singleline) Do txt = objDateiLeser.ReadLine Dim m As Match = r.Match(txt) If (m.Success) Then Dim word1 As Group = m.Groups(1) Debug.WriteLine(word1.ToString) End If Loop Until objDateiLeser.EndOfStream objDateiLeser.Close() objDateiLeser = Nothing Console.ReadKey() End Sub End Module
Nach ein paar Änderungen am Code dank diesem Forum hier, tut das Programm auch und der unten abgebildete Fehler ist endlich weg.
Doch nun hapert es noch ein bisschen an den Regulären Ausdrücken, doch Übung macht der Meister. Probieren geht über Studieren.