PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Textfilter per Batch/ VB Skript



jani
07.12.2009, 10:22
Hi,

ich würde gerne einen Textfilter in Verbindung mit FMS32pro und Bani SMS realisieren!

Dabei geht es um die lästigen EOT und NULL! Ich hatte hier im Forum bei einem anderen Thread schonmal gefragt und mir wurde gesagt das dies per VB Skript einfacher zu erstellen wäre als mit einer Batch!

Leider habe ich dazu im Internet irgendwie nichts gefunden! Hat jemand von euch eventuell eine Filterfunktion in seiner Batch laufen oder hat eventuell einen solchen VB Skript?

Wenn ja würde ich mich über den einen oder anderen Tipp sehr freuen!

DANKE!

Gruß
Jan

Beatzler
07.12.2009, 10:31
Hey,

ich werde dir dann hier meine Lösung gleich mal posten. Ggf. ist es ja auch für andere noch interresant. Habe ich damals auch nicht alleine ausgearbeitet !!

MFG

jani
07.12.2009, 10:32
Hi,

ok das ist cool!

Bin gespannt!

Gruß
Jan

Beatzler
07.12.2009, 12:13
Also nun wie gewünscht die kleine Anleitung um Textdateien auf bestimmte Wörter zu durchzusuchen und zu ersetzen. Somit ist zum einen eine Art Filterfunktion möglich zum anderen könnten so aber auch div. Einsatzkürzel automatisch ausgeschrieben oder abgewandelt werden, z.B. aus THKL wird Kleine Technische Hilfeleistung. Aus ä wird ae usw. Dies ist ggf. für eine Sprachausgabe oder dergleichen sinnvoll.

Weiterhin ist es z.B. dann auch möglich <EOT> oder andere Sonderzeichen wie NULL oder * usw. zu "filtern" man kann z.B. die * welche normalweise als Abstandsmarkierungen genutzt werden gegen ein Leerzeichen ersetzen lassen oder das <EOT> komplett rausnehmen.

Dies ist nur eine Beispielhafte Lösung wie ich sie nun schon seit knapp einem Jahr sehr zufrieden nutze. Ggf. gibt es bessere, schnellere Lösungen mir reicht es so aber.


Was brauchen wir?

- Eine Alarmmierungsabarbeitung mittels Batch ( Bei Alarmaktion wird eine Batch gestartet ) in denen der ausgewertete Alarmtext in eine Textdatei übertragen wird und dann weiter genutzt wird ( Zum Alarmsms / E-Mail versenden etc. )
- Ein VB-Skript
- Textdateien ;-)

Alarmbatch --> Umwandlung des ausgewerteten Alarm in Textdatei:

Dies ist recht Simpel, Sowohl bei POC32 als auch bei FMS32(Pro) enthält der Übergabeparameter %3 die gewünschten, ausgewerteten Textinformationen der Alarmmeldung. Diese werden dann natürlich genau so übergeben, wie ausgewertet.

Um diese nun in eine Textdatei schreiben zu lassen schreibt ihr in eure Batch, welche ja von POC32 oder FMS32 aufgerufen wurde ( sonst klappt das natürlich nicht ) z.B. folgendes rein:
( Bei FMS32 an die Übergabe der Parameter im Aufruf denken !
C:\MeinPfad\Alarmierungen\WER\WER-Alarm.bat "%1" "%2" "%3" "%4" )



@ECHO OFF

ECHO ACHTUNG EINSATZ! ALARMMELDUNG: %3 ZEITPUNKT: %time% DATUM: %date% /\ENDE/\ >> C:\MeinPfad\Alarmtext\Alarmsms.txt


Das Ergebnis in der Textdatei sieht dann so aus:
ACHTUNG EINSATZ! ALARMMELDUNG: "BMA*Musterhausen*Musterstraße 32*Moebelhaus Muster<EOT> ZEITPUNKT: 12:41:47 DATUM: 07.12.2009 /\ENDE/\

VB-Skipt Filter:

Für nachfolgenden Schritt ggf. bei Win XP in den Ordneroptionen die Ansichten der Dateiendungen anpassen.

Im Explorer:
Extras-> Ordneroptionen -> Reiter Ansicht -> "Erweiterungen bei bekannten Dateitypen ausblenden" auf nicht aktiv setzen !

Nun erstellt ihr euch eine neue Textdatei (rechtsklick-> neu -> Texdokument ) mit dem Namen Alarmfilter.vbs. Die Abfrage ob die Dateinamenveränderung durchgeführt werden soll mit Ja bestätigen.

In diese Datei wird folgendes VB-Skript eingefügt und abgespeichert:



'Angabe der Ersetzungspaare als "TextAlt=TextNeu"
Ers = Array(_
"<EOT>$",_
"*$ ")

Trenn = "$" 'Trennungszeichen zwischen TextAlt und TextNeu

If WScript.Arguments.Count > 0 Then
Datei = WScript.Arguments(0)
Else
WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")

For i = 0 To UBound(Ers)
Ers(i) = Split(Ers(i), Trenn)
Next

Text = fso.OpenTextFile(Datei).ReadAll
For i = 0 To UBound(Ers)
Text = Replace(Text, Ers(i)(0), Ers(i)(1), 1, -1, vbTextCompare)
Next
fso.CreateTextFile(Datei, True).Write Text



Dies ist nur eine Beispiel Filterdatei mit der <EOT> und * gefiltert werden können.

Erklärung:
Das Array "Ers" enthält alle Ersetzungsinformationen

Das $ Zeichen dient als Trennungszeichen zwischen dem "Original Wort" oder Kürzel etc. und dem zu ersetzenden Kürzel. Das Trennungszeichen kann bei bedarf auch geändert werden ( wenn z.B. $ gefiltert werden soll ) Dies muss dann im Abschnitt Trenn = erfolgen

Eine komplette Ersetzung ist in Anführungszeichen zu setzen und am ende mit ,_ zu kennzeichnen. Hinter die letzte Ersetzungangabe ist das Array nur mit einer ) zu schließen.
Beispiele:

"<EOT>$" = <EOT> wird komplett enfernt und gegen nichts ersetzt
"BMA$Brandmeldeanlage" = Aus BMA wird Brandmeldeanlage
"*$ " = Das * wird gegen ein Leerzeichen ersetzt


Filtereinbau in Batch:

Nachdem nun die Umwandlung in eine Textdatei sowie die eigentlicher Filterfunktion steht muss diese nur noch in der Batch aufgerufen und somit abgearbeitet werden.


@REM ALARMIERUNG WIRD gefiltert!
cscript //nologo C:\MeinPfad\Alarmierungen\Alarmfilter\Alarmfilter. vbs "C:\MeinPfad\Alarmtext\Alarmsms.txt"


Dies ist der Aufruf in unserer Alarm Batch um die Textdatei Alarmsms.txt mit dem "Filterskript" Alarmfilter.vbs abzuarbeiten. Dies geschieht sofort parallel. Somit ist zu beachten was und wie gefiltert / ersetzt wird da es in dem Textdokument direkt geändert und somit ggf. überschrieben oder entfernt wird !

Nun könnte danach dann der eigentliche Aufruf der SMS Versendung oder was auch immer stattfinden.



Natürlich ist ganz am Ende dran zu denken die Textdatei auch wieder zu löschen da ansonsten alle Folge Alarmierungen einfach in die nächsten Zeilen geschrieben werden ! Dies könnte bei einer SMS Alarmierung dann schnell teuer werden ;-)



DEL C:\MeinPfad\Alarmtext\Alarmsms.txt


Vor dem löschen könnte mithilfe der Wait.exe oder einen Ping etc. eine Wartezeit generiert werden. Somit liese sich auch manuell nochmals eine Unterdrückung doppelter oder schnell hinternander folgender Ausführungen der Batch Datei einrichten.

http://www.petersen.de/content/contenido-4.6.4/cms/front_content.php?idart=163

Bei Fragen, Fehlern oder Unklarheiten bitte einfach hier posten.

MFG Beatzler