graudon
Goto Top

VBS Fehler bei WriteLine

Hallo zusammen,

ich verwende ein Script in OL2016, welches E-Mail -Inhalte in eine Textdatei schreibt. Das läuft schon seit Jahren!

Es schreibt den Mail-Betreff in die erste Zeile der Datei und den Body in die 2. Zeile.

Jetzt läuft das Script häufig in den Fehler 800A0005 - Ungültiger Prozeduraufruf oder ungültiges Argument.

Der Fehler tritt beim Schreiben der 2. Zeile auf. Ich habe das nun geändert und in mal in eine Zeile schreiben wollen - gleiches Ergebnis. Ich gehe davon aus, das der Inhalt des Bodys ein Problem verursacht.

Trivialtexte a „Das ist ein Test“ funktionieren. Längere Zufallszeichenfolgen gehen schief...

Hat jemand eine Idee?

Danke und Grüsse

Content-ID: 531434

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

LukasD
LukasD 04.01.2020 um 14:20:19 Uhr
Goto Top
Hi,

wäre hilfreich, wenn du das Script mal veröffentlichst.
142232
142232 04.01.2020 aktualisiert um 14:29:59 Uhr
Goto Top
Vermutlich nutzt du das falsche Encoding beim Öffnen/Erstellen der Datei. Glaskugel da Code fehlt ...
Das FS Object beschwert sich dann mit d o.g. Fehler bei nicht supporteten Zeichen, per Default werden Files ja als Plain ASCII geöffnet.
https://www.devguru.com/content/technologies/vbscript/filesystemobject-o ...

Ich würde alles statt mit dem FS Object auszugeben, als UTF-8 wegschreiben, und zwar so
https://developer.rhino3d.com/guides/rhinoscript/read-write-utf8/
Graudon
Graudon 04.01.2020 um 15:34:40 Uhr
Goto Top
Klar, anbei schon mal der kritische Teil:

...
If prop.Value = "" And result.Count > 0 then

If VW=015 Then
LE=12
Else LE=11
END IF

MSISDN = mid( vRN ,POS , LE )
Inhalt = LEFT(TRIM(objEMail.body),300)
prop.Value ="m"
objEMail.save
randomize
Set f = fso.OpenTextFile(PATH_SMS_DIR & "\" & Cstr(tmp) & "_" & Cstr(Int((9999 - 0 + 1) * Rnd + 5)) & ".txt", 2, True)
f.WriteLine MSISDN
f.WriteLine Inhalt
f.Close
END IF



Es handelt sich hier um einen Mail2SMS-Versand. Dazu muss erst die Rufnummer formatiert werden um die Rufnummer ordentlich zu formatieren und der Inhalt der SMS steht dann im Body. Dafür dreht das Script noch einige Runden. Bis zur MSISDN kommt es problemlos. Das File wird angelegt und die Rufnummer steht auch drin. Der Part mit dem Body ist das Problem. Aber er sieht such nicht anders aus, als andere Scripte an der Stelle auch. Wird noch mehr gebraucht?
142232
142232 04.01.2020 aktualisiert um 15:45:49 Uhr
Goto Top
Erstens
Inhalt = LEFT(TRIM(objEMail.body),300)
erster Fehler, die Zeile geht davon aus das der Body mindestens 300 Zeichen lang ist, ist er das nicht wird dein Skript in einen Fehler laufen!

Zweitens
Set f = fso.OpenTextFile(PATH_SMS_DIR & "\" & Cstr(tmp) & "_" & Cstr(Int((9999 - 0 + 1) * Rnd + 5)) & ".txt", 2, True)
Definiert das File als ASCII, siehe Link von mir oben zum definieren des Encodings der Datei (Parameter 4)! Oder besser gleich wie im Link als UTF-8 kodiert weg schreiben.
Außerdem prüfst du nicht ob die Dateien schon existiert, du wirst sie also im Extremfall überschreiben.

Drittens
f.WriteLine Inhalt
Wenn Inhalt durch den Fehler leer ist, ebenfalls Exception.

Also nochmal VBS Grundkurs zur Fehlerbehandlung besuchen 😜.
Graudon
Graudon 04.01.2020 um 16:22:12 Uhr
Goto Top
Grundkurs würde schon mal gut sein und nein, ich habe von VBS eigentlich keine Ahnung - sorry ;-((

Aber ich habe deine Hinweise mal getestet:
Erstens: die 300 Zeichen sollen den Inhalt begrenzen. Ich habe mal auf 30 Zeichen reduziert und 50 geschickt.- hat aber keinen Effekt, bzw. Es hat einmal funktioniert, dann nicht mehr (gleicher Fehlercode an gleicher Stelle …
Zweitens: das habe ich jetzt noch nicht probiert - mache ich die Tage, wenn ich wieder mehr Zeit habe und die Files bekommen jedes Mal den Timestamp und eine Zufallszahl. Das geht so in Ordnung
Drittens: Wenn ich mir Inhalt in der MsgBox ausgeben lasse wird alles angezeigt, also Inhalt ist nie leer.

Interessanterweise funktionieren E-Mails, wenn sie z.B. von Outlook versendet werden. Meine Testmails kamen vom iPhone - also doch letztendlich so eine Formatproblem. rrr ;-((
142232
142232 04.01.2020 aktualisiert um 16:39:49 Uhr
Goto Top
Deswegen gleich per UTF-8 wegschreiben wie ich gesagt habe dann bist du den Fehler sofort los.
mayho33
mayho33 04.01.2020 um 22:28:48 Uhr
Goto Top
Zitat von @Graudon:
Erstens: die 300 Zeichen sollen den Inhalt begrenzen. Ich habe mal auf 30 Zeichen reduziert und 50 geschickt.- hat aber keinen Effekt, bzw. Es hat einmal funktioniert, dann nicht mehr (gleicher Fehlercode an gleicher Stelle …

LEFT(TRIM(objEMail.body),300)

Warum baust du dann nicht einfach ein If drumherum?

If len((TRIM(objEMail.body)) > 200 then
... 
End if
Graudon
Graudon 05.01.2020 um 18:29:20 Uhr
Goto Top
Moin, danke euch allen, leider kann ich deine Lösung lieber serial nicht nutzen, da das Zielprogramm mit mehreren Applikationen arbeitet und nur ein Standard versteht face-sad(

Ansonsten tritt das Problem nur bei iOS Mailclients auf, so dass ich das erst mal so hinbekomme - schönen Sonntag dann noch!

Grüsse
142232
142232 05.01.2020 aktualisiert um 20:32:23 Uhr
Goto Top
Dann nutz halt Regex um ungültige Zeichen auszufiltern, oder eben ANSI 1252 face-wink.
Graudon
Graudon 05.01.2020 um 20:34:15 Uhr
Goto Top
wie sähe das aus?
142232
142232 05.01.2020 aktualisiert um 21:59:44 Uhr
Goto Top
Ein Replace z.B.mit folgendem Regex
[^\w]
Damit werden alle Zeichen die nicht a-z A-Z 0-9 oder underscore sind gelöscht. Kannst du natürlich um weitere Zeichen ergänzen die du zusätzlich erlauben willst.
Oder als weiteres Beispiel alle Zeichen die keine ASCII Zeichen sind ersetzen
[^\x00-\x7F]

Weitere Info zu Regular Expressions findest du hier
https://docs.microsoft.com/de-de/dotnet/standard/base-types/regular-expr ...

Wie man mit VBS Regex anwendest kannst du hier nachlesen
https://developer.rhino3d.com/guides/rhinoscript/vbscript-regexp-objects ...