borob14
Goto Top

VB + VBS um Email in Txt zu speicher, auszuwerten und Aktion auszulösen.

Hallo zusammen.

ich sitze gerade an folgendem "Problem"

Ich habe eine Standardisierte Email welche per Regel ein VBA Script auslöst, welches eine TXT erstellt und anschließende ein VBS Script startet. (das funktioniert schon mal)
Das VBS soll nun die TXT auf einen String durchsuchen und bei Erfolg nochmals nach einen weiteren String suchen. (das funktioniert ebenfalls schon) nun will ich aber, dass das Script nach dem zweiten gefundenen String bis zum nächsten Koma den Text in eine Variable speichert. (die benötige ich später um ein Event auszulösen)

Ich hoffe mal es kann mir wer helfen.

Den VBA Teil schenken wir uns mal und der derzeitige VBS Script sieht so aus:

Set fso=CreateObject("Scripting.FileSystemObject")
Set oSourcefile = fso.OpenTextFile("C:\PFAD\DATEI.txt")
while not oSourcefile.AtEndOfStream
sTemp = oSourcefile.ReadLine
If Instr(sTemp,"Kryptik")>0 then
'MsgBox "Kryptik gefunden"
Set fso=CreateObject("Scripting.FileSystemObject")
Set oSourcefile = fso.OpenTextFile("C:\PFAD\DATEI.txt")
while not oSourcefile.AtEndOfStream
sTemp = oSourcefile.ReadLine
If Instr(sTemp,"Clientlist: SERVER / ")>0 then
MsgBox "HIER SOLLTE NUN DER TEIL MIT DEM SPEICHERN DES TEXTTEILS FOLGEN"
End if
wend
End if
wend

_____________________________________________

Die Testdatei kann ich aus Sicherheitsgründen nur ungern posten. Aber wie gesagt es gibt den String: "Clientlist: SERVER / " darauf folgt dann ein Client Name welcher mit einen Komma beendet wird. Diesen brauche ich in einer Variable.

Danke schon mal für die Hilfe!

mfg Rob

Content-Key: 248907

Url: https://administrator.de/contentid/248907

Printed on: April 20, 2024 at 07:04 o'clock

Member: colinardo
Solution colinardo Sep 11, 2014 updated at 11:12:12 (UTC)
Goto Top
Hallo Rob, Willkommen auf Administrator.de!
Hab's dir etwas mit Regular Expressions optimiert (ist schneller als jedes mal Zeile für Zeile durchzugehen face-smile)
Dim strClientname, fso, regex, strContent, matches
Set fso=CreateObject("Scripting.FileSystemObject")  
Set regex = CreateObject("vbscript.regexp")   
regex.IgnoreCase = True
regex.Pattern = "Kryptik"  
strContent = fso.OpenTextFile("C:\PFAD\DATEI.txt").ReadAll()  
Set matches = regex.Execute(strContent)
If matches.Count > 0 Then
	regex.Pattern = "Clientlist: SERVER / ([^,\r\n]+)"  
	Set matches = regex.Execute(strContent)
	If matches.Count > 0 Then
		strClientname = Trim(matches(0).submatches(0))
                msgbox strClientname
	End If
End If
Grüße Uwe
Member: Borob14
Borob14 Sep 11, 2014 at 09:46:21 (UTC)
Goto Top
Wow danke das ging schnell! Er gibt mir in der MSG Box den Client aus (so wie gewünscht) allerdings steht drunter: "Logfile: 16856" ist das mit in der Variable gespeichert? Wäre ziemlich ungünstig da ich einen CMD Befehlt mit dem Clientnamen per VBS auslösen will. Ist sicherlich ne Sinnlose Frage aber bin nicht so der Programmierer mach das nur nebenbei face-smile
Member: colinardo
Solution colinardo Sep 11, 2014 updated at 11:12:17 (UTC)
Goto Top
Hab den Pattern nochmal angepasst, ist halt nicht so einfach ohne deinen RAW-Text rund um den zu extrahierenden Teil face-wink
Member: Borob14
Borob14 Sep 11, 2014 at 11:12:02 (UTC)
Goto Top
Klappt perfekt danke! Der Client Name ist im Normalfall gleich lang, es gibt aber leider auch Ausnahmen die mit abgefangen werden müssen. Sieht aber super aus, er gibt zumindest beim Test Namen den korrekten aus (auch ein künstlich verlängerter Wert klappte!

Danke für deine schnelle und unkomplizierte Hilfe.

Eine letzte Frage hätte ich noch: Ich will ja auch dazu lernen -> ([^,\r\n]+) -> kannst du mir den Syntax erklären bzw. ne empfehlenswerte Seite nennen?
Member: colinardo
colinardo Sep 11, 2014 updated at 11:15:35 (UTC)
Goto Top
Zitat von @Borob14:
Eine letzte Frage hätte ich noch: Ich will ja auch dazu lernen -> ([^,\r\n]+) -> kannst du mir den Syntax erklären
bzw. ne empfehlenswerte Seite nennen?
Klar: Regular Expressions Tutorial

[^,\r\n]+

Match a single character NOT present in the list below «[^,\r\n]+»
   Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
   The character “,” «,»
   A carriage return character «\r»
   A line feed character «\n»
Grüße Uwe
Member: Borob14
Borob14 Sep 11, 2014 at 11:31:59 (UTC)
Goto Top
Danke! Mal sehen wie weit ich Heute noch komme mit dem Script, geht dank dir gut voran face-smile


Schönen Tag noch