Hallo Zusammen!
In letzter Zeit haben wir uns im Büro mit dem VBScripting in Allplan auseinandergesetzt. Die erste Aufgabe, die wir uns vorgenommen haben, war eine einfache Funktion zu schreiben, die aus einer Zeichenfolge mit Trennzeichen (z.B. "_") eine Sub-Zeichenfolge extrahiert. Kompliziert, deshalb hier ein Beispiel:
Syntax der Funktion:
ExtractString(txt as String , SplittSign as String , index as Integer)
Beispiel:
ExtractString("abc_def_ghi" , "_" , 1) -> "abc" ExtractString("abc_def_ghi" , "_" , 2) -> "def" ExtractString("abc_def_ghi" , "_" , 3) -> "ghi"
Der erste Code sah so aus:
Function ExtractString(txt, SplittSign, index) index = CInt(index) StringArray = Split(txt, SplittSign) If index - 1 > UBound(StringArray) Then ExtractString = "" Else ExtractString = StringArray(index - 1) End If End Function
Und das hat wunderbar und zuverlässig sowohl in Excel, als auch in dem kleinen Testprogramm "VB-Script Tester" von @Nemo funktioniert(siehe Link). Leider in Allplan gab es viele Probleme und Abstürze. Es kam vor, dass die Funktion bei einer Zeichenfolge mit 3 Trennzeichen funktioniert hat, mit 4 Trennzeichen aber nicht mehr. Oder wenn der Text zwischen den Trennzeichen mal zu kurz oder zu lang war. Beim Absturz kam in Protokoll-Fenster die Meldung:
ErrorAllplanUnhandledExceptionFilter Exception nr E06D7363 -INTERN ERROR e06d7363 is occured at 00007FFB3C623E49
Damit konnten wir natürlich nichts anfangen. Wir haben die Funktion komplett umgeschrieben, so dass sie mit Arrays gar nicht zu tun hat. Der Code sieht jetzt so aus (falls vielleicht jemand das gleiche Problem hat):
Function ExtractString(txt, SplittSign, i) i = CInt(i) start = 0 j = 1 found_at = 0 ExtractString = txt Do found_at = InStr(start + 1, txt, SplittSign) If found_at = 0 Then found_at = Len(txt) + 1 End If If j = i And Start < Len(txt) Then ExtractString = Mid(txt, start + 1, found_at - start - 1) End If start = found_at j = j + 1 Loop Until j > i End Function
Jetzt die Frage an die Allgemeinheit: habt Ihr schon ähnliches Problem? Oder auch andere Probleme, die irgendwie umgegangen werden müssten, weil der Allplan interner Compiler damit nicht klar gekommen ist?
Und hier gleich eine Bitte an Allplan: schaut Euch bitte diese Problematik mit den Arrays an. Ich glaube, hier gibt es Versbesserungsbedarf.