Per VBScript eine .txt Datei auslesen
Ich habe eine .txt Datei, die durch auslesen einer PDF entstanden ist, und möchte die Informationen/Daten aus der .txt in eine XML schreiben.
Die .txt wird erzeugt durch ein Programm Planet Press, das PDF´s auslesen kann.
Hallo erstmal Zusammen,
ich habe folgendes Problem:
Ich habe vor mit einem VBscript eine .txt nach Informationen zu durchsuchen, die anschließend in eine XML eingeschrieben werden sollen.
Meine .txt Datei erhalte ich dadurch, dass ein sogenannter Workflow (Planet Press Suite 7 vllt. bekannt) eine PDF (in dem Fall eine Rechnung)
den Text als String in diese .txt schreibt. Das funktioniert so weit alles wunderbar jedoch, kann ich in dem Planet Press Workflow auch einen VBScript
einbeten. das benötige ich da ich keinerlei Möglichkeit habe mit Planet Press, eine XML zu erstellen bzw. Infos aus der .txt Datei in die XML schreiben.
Also habe ich mir gedacht betten wir einfach einen VBScript ein... leichter gesagt als getan.
Ich habe bereits soweit, dass ich eine XML erstellen lasse, dort sich meine Struktur befindet und ich auf die .txt Datei zugreifen kann (Script folgt).
Jedoch erhalte ich erstens: keinerlei Text aus der .txt Datei und zweitens: wird mein Ltrim auch nicht so durchgeführt so wie ich es gerne hätte.
Und nun dachte ich vllt. kann mir ein VBScript-Profi helfen da ich mich gerade erst neu eingelernt habe in VBS und ich nicht weiter weis.
Ich hoffe Ihr könnt mir helfen!
Mit freundlichen Grüßen
Marco
Die .txt wird erzeugt durch ein Programm Planet Press, das PDF´s auslesen kann.
Hallo erstmal Zusammen,
ich habe folgendes Problem:
Ich habe vor mit einem VBscript eine .txt nach Informationen zu durchsuchen, die anschließend in eine XML eingeschrieben werden sollen.
Meine .txt Datei erhalte ich dadurch, dass ein sogenannter Workflow (Planet Press Suite 7 vllt. bekannt) eine PDF (in dem Fall eine Rechnung)
den Text als String in diese .txt schreibt. Das funktioniert so weit alles wunderbar jedoch, kann ich in dem Planet Press Workflow auch einen VBScript
einbeten. das benötige ich da ich keinerlei Möglichkeit habe mit Planet Press, eine XML zu erstellen bzw. Infos aus der .txt Datei in die XML schreiben.
Also habe ich mir gedacht betten wir einfach einen VBScript ein... leichter gesagt als getan.
Ich habe bereits soweit, dass ich eine XML erstellen lasse, dort sich meine Struktur befindet und ich auf die .txt Datei zugreifen kann (Script folgt).
Jedoch erhalte ich erstens: keinerlei Text aus der .txt Datei und zweitens: wird mein Ltrim auch nicht so durchgeführt so wie ich es gerne hätte.
Und nun dachte ich vllt. kann mir ein VBScript-Profi helfen da ich mich gerade erst neu eingelernt habe in VBS und ich nicht weiter weis.
Set oFS = CreateObject("Scripting.FileSystemObject")
Const strXmlFile = "Rechnung.xml"
Const source = "Rechnungsname.txt"
dim zeile,myLine
Set objXMLFile = oFS.OpenTextFile(strXmlFile, 2, True, 0)
objXMLFile.WriteLine "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>"
objXMLFile.WriteLine "<?xml-stylesheet type=""text/xsl""?>"
objXMLFile.WriteLine "<Dokument>"
Set file = oFS.GetFile(source)
Set line = file.OpenAsTextStream(1,TristateUseDefault)
Do While line.AtEndOfStream <> True
myLine = Split(line.ReadLine," - ")
key = myline(0)
wert = myline(1)
Call CreateXML (key,wert)
zeile = LTrim(line.readline)
if (i = 17) then
myLine = Split(zeile," - ")
end if
Loop
Call CloseXML()
Function CreateXML(key,wert)
if (key = "Kundenname") then
objXMLFile.WriteLine vbTab & "<Dokument>"
objXMLFile.WriteLine vbTab & vbTab & "<DocumentName>" & strXmlFile & "</DocumentName>"
objXMLFile.WriteLine vbTab & "<Adr>"
objXMLFile.WriteLine vbTab & vbTab & "<Name>" & wert & "</Name>"
end if
objXMLFile.WriteLine vbTab & vbTab & "<Company>" & wert & "</Company>"
objXMLFile.WriteLine vbTab & vbTab & "<Street>" & wert & "</Street>"
objXMLFile.WriteLine vbTab & vbTab & "<Zip>" &wert & "</Zip>"
objXMLFile.WriteLine vbTab & vbTab & "<City>" & wert & "</City>"
objXMLFile.WriteLine vbTab & "<Phone>"
objXMLFile.WriteLine vbTab & vbTab & "<Work>" & wert & "</Work>"
objXMLFile.WriteLine vbTab & "</Phone>"
objXMLFile.WriteLine vbTab & "<Fax>"
objXMLFile.WriteLine vbTab & vbTab & "<Work>" & wert & "</Work>"
objXMLFile.WriteLine vbTab & "</Fax>"
objXMLFile.WriteLine vbTab & "</Adr>"
'Ende Anschrift'
objXMLFile.WriteLine vbTab & "<Taxnum>" & wert & "</Taxnum>"
'Ende Steuernummer'
'Kundenanschrift'
objXMLFile.WriteLine vbTab & "<Customer>"
objXMLFile.WriteLine vbTab & "<Addr>"
objXMLFile.WriteLine vbTab & vbTab & "<Name>" &wert & "</Name>"
objXMLFile.WriteLine vbTab & vbTab & "<Street>" & wert & "</Street>"
objXMLFile.WriteLine vbTab & vbTab & "<Zip>" &wert & "</Zip>"
objXMLFile.WriteLine vbTab & vbTab & "<City>" &wert & "</City>"
objXMLFile.WriteLine vbTab & "</Addr>"
objXMLFile.WriteLine vbTab & "</Customer>"
'Ende Kundenanschrift'
'Rechnungsdaten'
objXMLFile.WriteLine vbTab & vbTab & "<Date>" &wert & "</Date>"
objXMLFile.WriteLine vbTab & vbTab & "<BillID>" &wert & "</BillID>"
objXMLFile.WriteLine vbTab & vbTab & "<OrderID>" & wert & "</OrderID>"
objXMLFile.WriteLine vbTab & vbTab & "<Curr>" & wert & "</Curr>"
'Ende Rechnungsdaten'
'Artikel'
objXMLFile.WriteLine vbTab & "<Item>"
objXMLFile.WriteLine vbTab & vbTab & "<Number>" &wert & "</Number>"
objXMLFile.WriteLine vbTab & vbTab & "<Count>" &wert & "</Count>"
objXMLFile.WriteLine vbTab & vbTab & "<CUnit>" &wert & "</CUnit>"
objXMLFile.WriteLine vbTab & vbTab & "<Id>" &wert & "</Id>"
objXMLFile.WriteLine vbTab & vbTab & "<Name>" &wert & "</Name>"
objXMLFile.WriteLine vbTab & vbTab & "<Price>" &wert & "</Price>"
objXMLFile.WriteLine vbTab & vbTab & "<LumpSum>" & wert & "</LumpSum>"
objXMLFile.WriteLine vbTab & vbTab & "<Currency>" & wert & "</Currency>"
objXMLFile.WriteLine vbTab & "</Item>"
'Ende Artikel'
objXMLFile.WriteLine vbTab & "</Dokument>"
End Function
Function CloseXML()
wscript.echo "XML wurde erfolgreich erstellt"
End Function
Ich hoffe Ihr könnt mir helfen!
Mit freundlichen Grüßen
Marco
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 157069
Url: https://administrator.de/contentid/157069
Ausgedruckt am: 25.11.2024 um 21:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo MarcoIT!
Dein VBS-Code ergibt so keinen Sinn. Von daher erkläre mal, wie die Text-Datei aufgebaut ist?
Enthält jede Zeile einen Kunden und mehrere '-' (Spalten)?
Und was soll die Codezeile 23 darstellen?
Gruß Dieter
Dein VBS-Code ergibt so keinen Sinn. Von daher erkläre mal, wie die Text-Datei aufgebaut ist?
Enthält jede Zeile einen Kunden und mehrere '-' (Spalten)?
Und was soll die Codezeile 23 darstellen?
Gruß Dieter
[OT]
Moin MarcoIT,
Diese Formatierung lässt auch die führenden Leerzeichen unverändert.
Grüße
Biber
[/OT]
Moin MarcoIT,
Zitat von @MarcoIT:
PS: Nach dem ich den Beitrag hier gespeichert habe, sehe ich das Leerzeichen automatisch gelöscht werden.... ich werde
einfach statt Leerzeichen - einfügen so das du dir ein Bild machen kannst.
Weniger Aufwand hättest du gehabt, wenn du den Text in Code-Tags (evtl. mit der Zusatzangabe "code type=plain" ) gepostet hättest.PS: Nach dem ich den Beitrag hier gespeichert habe, sehe ich das Leerzeichen automatisch gelöscht werden.... ich werde
einfach statt Leerzeichen - einfügen so das du dir ein Bild machen kannst.
Diese Formatierung lässt auch die führenden Leerzeichen unverändert.
Grüße
Biber
[/OT]
Hallo Marco!
Hat leider etwas länger gedauert
Das Ganze ist immernoch ziemlich unklar (unterschiedliche Zeilenanzahl, unvollständig usw.). Um eine brauchbare Lösung zu finden, müsstest Du schon ein präziseres Beispiel mit fiktiven Daten in Code-Tags (< code>Quelltext< /code>) posten.
Bei diesem Code, wird die Import-Text-Datei in ein neues Text-Array geschrieben und zu Testzwecken in einer neuen Export-Text-Datei ausgegeben, was die Auswertung etwas erleichtern sollte? Konstanten entsprechend anpassen:
Ergebnis anhand Deines Beispiels:
Hilft Dir das irgendwie weiter?
Und der Ablauf in etwa so:
Gruß Dieter
Hat leider etwas länger gedauert
Das Ganze ist immernoch ziemlich unklar (unterschiedliche Zeilenanzahl, unvollständig usw.). Um eine brauchbare Lösung zu finden, müsstest Du schon ein präziseres Beispiel mit fiktiven Daten in Code-Tags (< code>Quelltext< /code>) posten.
Bei diesem Code, wird die Import-Text-Datei in ein neues Text-Array geschrieben und zu Testzwecken in einer neuen Export-Text-Datei ausgegeben, was die Auswertung etwas erleichtern sollte? Konstanten entsprechend anpassen:
Const ExportPath = "E:\Test\Export.txt"
Const ImportPath = "E:\Test\Import.txt"
Dim Fso, File, Text, Zeile, TextZeile, TextPos, NewText, i
Set Fso = CreateObject("Scripting.FileSystemObject")
Set File = Fso.OpenTextFile(ImportPath)
'Import-Textzeilen in Array einlesen
Text = Split(File.ReadAll, vbCrLf): File.Close
'Export-Text-Array definieren (+10 steht für mehr als 1 Eintrag pro Zeile)
ReDim NewText(UBound(Text) + 10)
'Export-Textzeilen-Zähler definieren (Start = Item 0)
i = 0
'Import-Textzeilen durchlaufen
For Each Zeile In Text
'Leerzeichen in Textzeile entfernen
TextZeile = Trim(Zeile)
'Test Leerzeile
If TextZeile <> "" Then
'Text-Position wenn Anzahl Leerzeichen >= 3 ermitteln (2 Einträge in Textzeile)
TextPos = InStr(TextZeile, " ")
'Test Anzahl Leerzeichen >= 3 (2 Einträge in Textzeile)
If TextPos > 0 Then
'1. Eintrag in New-Text-Array schreiben
NewText(i) = Mid(TextZeile, 1, TextPos - 1)
'2. Eintrag in New-Text-Array schreiben
NewText(i + 1) = Trim(Mid(TextZeile, TextPos)): i = i + 2
Else
'Nur einen Eintrag in New-Text-Array schreiben
NewText(i) = TextZeile: i = i + 1
End If
End If
Next
'Export-Datei erstellen/überschreiben
Set File = Fso.CreateTextFile(ExportPath)
'New-Text-Array in Export-Datei schreiben
File.Write Join(NewText, vbCrLf): File.Close
Hier befindet sich eigentlich das Logo
Hier das was unter dem Logo steht.
Anschrift des Rechnungssenders
Rechnung Original
Name Rechnungsempfängers
Weiterer Name des Rechnungsempfängers
Beleg Nr.:
Straße
Kunden Nr.:
Datum 25.11.2010
D PLZ und Ort
Ust. ID.: DE
Sachbearbeiter:
Telefon:
Telefax:
Bestell Nr.:
Best. Datum: 18.11.2010
Lieferanschrift:
Lieferanschrift
Auftrags Nr.: / 18.11.2010
Lieferschein Nr.: / 24.11.2010
Sachbearbeiter
Leistungsdatum: 24.11.2010
Tel.:
Versandart: GLS
Straße
frei Haus, inkl. Verpackung
Und der Ablauf in etwa so:
Const XmlFolder = "E:\Test\"
Const XmlFile = "Test.Xml"
Const adTypeText = 2
Const adSaveCreateOverWrite = 2
'Xml-Array definieren
Dim Values(23), i
'Xml-Array mit "" (Leer-Text) initialisieren
For i = 0 To UBound(Values): Values(i) = "": Next
'Verfügbare Werte ermitteln und in die entsprechende Value-Nr. schreiben (siehe Xml-Text)
Values(0) = "Wert 0"
Values(5) = "Wert 5"
'....
'Xml-File erstellen
Call CreateXmlFile(XmlFile, Values)
'Xml-File im UTF8-Format erstellen
Sub CreateXmlFile(ByRef XmlName, ByRef Values)
Dim Text
Text = "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & vbCrLf
Text = Text & "<?xml-stylesheet type=""text/xsl""?>" & vbCrLf
'Beg Dokument
Text = Text & vbTab & "<Dokument>" & vbCrLf
Text = Text & vbTab & vbTab & "<DocumentName>" & XmlName & "</DocumentName>" & vbCrLf
'Anschrift
Text = Text & vbTab & "<Adr>" & vbCrLf
Text = Text & vbTab & vbTab & "<Name>" & Values(0) & "</Name>" & vbCrLf
Text = Text & vbTab & vbTab & "<Company>" & Values(1) & "</Company>" & vbCrLf
Text = Text & vbTab & vbTab & "<Street>" & Values(2) & "</Street>" & vbCrLf
Text = Text & vbTab & vbTab & "<Zip>" & Values(3) & "</Zip>" & vbCrLf
Text = Text & vbTab & vbTab & "<City>" & Values(4) & "</City>" & vbCrLf
Text = Text & vbTab & "<Phone>" & vbCrLf
Text = Text & vbTab & vbTab & "<Work>" & Values(5) & "</Work>" & vbCrLf
Text = Text & vbTab & "</Phone>" & vbCrLf
Text = Text & vbTab & "<Fax>" & vbCrLf
Text = Text & vbTab & vbTab & "<Work>" & Values(6) & "</Work>" & vbCrLf
Text = Text & vbTab & "</Fax>" & vbCrLf
Text = Text & vbTab & "</Adr>" & vbCrLf
'Steuernummer
Text = Text & vbTab & "<Taxnum>" & Values(7) & "</Taxnum>" & vbCrLf
'Kundenanschrift
Text = Text & vbTab & "<Customer>" & vbCrLf
Text = Text & vbTab & "<Addr>" & vbCrLf
Text = Text & vbTab & vbTab & "<Name>" & Values(8) & "</Name>" & vbCrLf
Text = Text & vbTab & vbTab & "<Street>" & Values(9) & "</Street>" & vbCrLf
Text = Text & vbTab & vbTab & "<Zip>" & Values(10) & "</Zip>" & vbCrLf
Text = Text & vbTab & vbTab & "<City>" & Values(11) & "</City>" & vbCrLf
Text = Text & vbTab & "</Addr>" & vbCrLf
Text = Text & vbTab & "</Customer>" & vbCrLf
'Rechnungsdaten
Text = Text & vbTab & vbTab & "<Date>" & Values(12) & "</Date>" & vbCrLf
Text = Text & vbTab & vbTab & "<BillID>" & Values(13) & "</BillID>" & vbCrLf
Text = Text & vbTab & vbTab & "<OrderID>" & Values(14) & "</OrderID>" & vbCrLf
Text = Text & vbTab & vbTab & "<Curr>" & Values(15) & "</Curr>" & vbCrLf
'Artikel
Text = Text & vbTab & "<Item>" & vbCrLf
Text = Text & vbTab & vbTab & "<Number>" & Values(16) & "</Number>" & vbCrLf
Text = Text & vbTab & vbTab & "<Count>" & Values(17) & "</Count>" & vbCrLf
Text = Text & vbTab & vbTab & "<CUnit>" & Values(18) & "</CUnit>" & vbCrLf
Text = Text & vbTab & vbTab & "<Id>" & Values(19) & "</Id>" & vbCrLf
Text = Text & vbTab & vbTab & "<Name>" & Values(20) & "</Name>" & vbCrLf
Text = Text & vbTab & vbTab & "<Price>" & Values(21) & "</Price>" & vbCrLf
Text = Text & vbTab & vbTab & "<LumpSum>" & Values(22) & "</LumpSum>" & vbCrLf
Text = Text & vbTab & vbTab & "<Currency>" & Values(23) & "</Currency>" & vbCrLf
Text = Text & vbTab & "</Item>" & vbCrLf
'End Dokument
Text = Text & vbTab & "</Dokument>" & vbCrLf
With CreateObject("ADODB.Stream")
.Type = adTypeText
.Charset = "UTF-8"
.Open
.WriteText Text
.SaveToFile XmlFolder & XmlName, adSaveCreateOverWrite
.Close
End With
End Sub
Gruß Dieter