Domino 9 und frühere Versionen > ND9: Entwicklung

Fehler bei Split bzw. StrToken mit leeren Werten

(1/3) > >>

Jürgen Schomann:
Ich habe folgenden Agenten:

Dim v As Variant
Dim s$
Dim d$
   
s = "1~~2~~3"
v = Split(s, "~~")
ForAll e In v
   d = d & Chr(10) & e
End ForAll
MsgBox d

Dieser liefert richtig

1
2
3

wenn oben s = "1~~~~3" ist aber falsch

1
~~3
~3
3

Das passiert nur wenn die Trennzeichen mehrere gleiche Zeichen, wie hier '~~', sind.
Die betrifft außerdem nur Werte innerhalb, '~~2~~3' oder '1~~2~~' verhalten sich bezüglich 1. bzw. 3. Wert richtig

Analog verhält sich auch StrToken, z. B. liefert StrToken("1~~~~3", "~~", 2) die Zeichenfolge '~~3'.
@Word dagegen arbeitet richtig und liefert in dem Fall eine leere Zeichenkette.
@Explode ist ja leider nicht für Separatoren mit mehr als einem Zeichen möglich.

Noch problematischer wird es z. B. mit '1~~~~~~4'
Gibt es eine Idee für eine Umgehung des Problems, ggf. wohl nur über Instr?

cebolina:
versuch mal


--- Code: ---...
v = Fulltrim(Split(s, "~"))
...

--- Ende Code ---

Gruß Stefan

Jürgen Schomann:
Vielen Dank für deine Antwort, aber das bringt mir nichts, denn dann gehen die leeren Werte verloren.
Ich brauche aber auch die leeren Werte für weitere Auswertungen.

Jürgen Schomann:
Noch eine Ergänzung
Folgendes Beispiel liefert sogar den Fehler 'String too large'

Dim v As Variant
Dim s$
   
s = "1~~~~~~3"
v = Split(s, "~~~")

Sowie das Trennzeichen aus mehreren gleichen Zeichen > 2 besteht kommt dieser Fehler, so z. B. auch bei '~~~~'.
Zur Vermeidung, dass ein gewähltes Trennzeichen selbst in den Werten vorkommt, werden oftmals Trennzeichenfolgen mit Sonderzeichen und Länge > 1 gewählt.
Das ist in vielen Fremdanwendungen bei uns der Fall. Oftmals sind in diesen Werte optional und dadurch leer.

Jürgen Schomann:
Und noch eine Ergänzung

StrToken("12", "+", 1) ergibt '12'
StrToken("1", "+", 1) ergibt '1'
StrToken("12", "+=", 1) ergibt '12'
aber StrToken("1", "+=", 1) ergibt leer obwohl die Trennzeichenkette aus verschiedenen Zeichen besteht.

Die Funktionen Split und StrToken arbeiten beide sehr unzuverlässig sowie die Trennzeichenkette eine Länge > 1 hat.
Es bleibt wohl leider nur der mühsamere Weg selbst in einer Schleife mit der InStr-Funktion die Zeichenketten zu analysieren, oder?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln