# Text splitten und in verschiedene Strings speichern



## fiction (8. September 2007)

Hallo Leute,

Ich hoffe, die Überschrift ist nicht zu verwirrend oder so. Hab ein Problem mit dem aufspalten eines Strings. Hier meine Überlegung:

Ich wollte einen Text der per DataArrival kommt und in dem w.getdata-String gespeichert wird, aufspalten undzwar wie folgt:

Text im DataArrival-String:
gProgrammers#Chatter_der_was_schreibt#Text der geschrieben wurde!

Das "g" soll in eine Variable Namens "command" geschrieben werden. Alle Commands die kommen, stehen an erster Stelle, so habe ich es schon mit Left probiert, was auch klappt.
Der Rest, durch die # getrennt, soll mit Split geteilt werden, und dann in splitted[0], splittet[1] etc. wieder zu finden sein.

Den Code, den ich probiert hab, zuerst mit Split zu teilen und dann den splittet[0] (gProgrammers) mit Left nochmal zu teilen, damit ich das gesondert hab, hat irgendwie nicht funktioniert.

Über ein Codesample würd ich mich sehr freuen. 
Danke im Vorraus.

Fiction


----------



## DrSoong (8. September 2007)

Ist ganz einfach:

```
Dim command As String, splittet() As String, Eingabe As String
Eingabe = "gProgrammers#Chatter_der_was_schreibt#Text der geschrieben wurde!" 'Ich weis hier mal den Wert zu
splittet = Split(Eingabe, "#")
command = Left(splittet(0), 1)
splittet(0) = Right(splittet(0), Len(splittet(0)) - 1)
'splittet(0) = Programmers
'splittet(1) = Chatter_der_was_schreibt
'splittet(2) = Text der geschrieben wurde!
```


Der Doc!


----------



## fiction (8. September 2007)

Hi Doc,

Das hat schonmal sehr gut geklappt, danke dafür!

Jetzt nochmal eine Frage: Ich will mit einer If-Abfrage prüfen, welcher Command eingegangen ist und ob ein bestimmtes Argument zutrifft, bekomm aber immer einen Laufzeitfehler "Index außerhalb des gültigen Bereichs".

Hier mal mein Code

Der Datenstring enthält hier: "+Programmers#a#Nickname"

If clientCommand = "+" And clientSplit(1) = "a" then
MsgBox "User joined"
End If

Muss ich was spezielles beachten? Wo ist mein Fehler? Habe alle Variablen in einem Modul mit zb. "Public clientSplit() as String" deklariert.

Gruß Fiction


----------



## fiction (9. September 2007)

Weiß keiner? 
Komm da irgendwie nicht weiter, leider.


----------



## DrSoong (9. September 2007)

Poste mal mehr Code, heute kann ich noch was machen.


Der Doc!


----------



## fiction (13. September 2007)

```
Private Sub w_DataArrival(ByVal bytesTotal As Long)
Dim spinIN As String
Dim message As String
Dim messageSplit() As String
Dim cmd As String

w.GetData spinIN
message = spinIN
messageSplit = Split(message, "#")
cmd = Left(messageSplit(0), 1)
messageSplit(0) = Right(messageSplit(0), Len(messageSplit(0)) - 1)


If cmd = ":" Then
w.SendData "BI'm a bot." & vbCrLf
w.SendData "a" & nickname.Text & vbCrLf
End If

If cmd = "c" Then
w.SendData "b" & password.Text & vbCrLf
End If

If cmd = "+" And messageSplit(1) = "a" Then
MsgBox "JOIN"
End If

End Sub
```

Bei der letzten Schleife liegt irgendwo der Hund begraben. Wenn in die entferne funktioniert der Code bis dahin.

Gruß Fiction


----------



## ronaldh (14. September 2007)

Wenn ich den Code (abgemagert um die genutzten Controls, weil die wollte ich nicht extra einrichten) laufenlasse, und die Variable "message" mit "+Programmers#a#Nickname" fülle, kommt sofort die Messagebox "JOIN". Das funktioniert bei also alles.

Grundsätzlich übersichtlicher wird das Programm, wenn Du die If-Schleifen mit ElseIf aufbaust, da "cmd" ja niemals = ":" und gleich "c" und gleich "a" sein kann, z.B. so:

```
If cmd = ":" Then
   w.SendData "BI'm a bot." & vbCrLf
   w.SendData "a" & nickname.Text & vbCrLf
ElseIf cmd = "c" Then
   w.SendData "b" & password.Text & vbCrLf
ElseIf cmd = "+" And messageSplit(1) = "a" Then
   MsgBox "JOIN"
End If
```

Aber das hilft hier natürlich nicht direkt weiter. Ich vermute, dass das Problem im Funktionsaufruf liegt. Vermutlich reagierst Du ja auf ein Ereignis, welches durch irgendetwas ausgelöst wird. Du solltest am Funktionsanfang mal ein "Debug.print" einbauen, dann siehst Du, ob die Funktion noch während der Abarbeitung erneut aufgerufen wurde, wo das Splitt nichts ergibt. Dann wäre messaheSplit neu dimensioniert, hätte aber das Element 1 nicht mehr. Denn die Fehlermeldung besagt eindeutig, dass der Index 1 für messageSplit ungültig ist.

Viele Grüsse
Ronald


----------

