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.