wake-up-neo.com

Zeichenfolge in Zeichenfeld zerlegen?

Wie kann ein VBA-String in ein Array von Zeichen aufgeteilt werden? 

Ich habe versucht Split(my_string, ""), aber das hat nicht funktioniert.

21
mezamorphic

Am sichersten und einfachsten ist es, nur eine Schleife zu machen;

Dim buff() As String
ReDim buff(Len(my_string) - 1)
For i = 1 To Len(my_string)
    buff(i - 1) = Mid$(my_string, i, 1)
Next

Wenn Sie garantiert Ansi-Zeichen verwenden, können Sie:

Dim buff() As String
buff = Split(StrConv(my_string, vbUnicode), Chr$(0))
ReDim Preserve buff(UBound(buff) - 1)
31
Alex K.

Sie können den String einfach einem Bytearray zuweisen (das Umkehren ist auch möglich). Das Ergebnis ist 2 Zahlen für jedes Zeichen. Daher konvertiert Xmas in ein Byte-Array mit {88,0,109,0,97,0,115,0}.
oder Sie können StrConv verwenden

Dim bytes() as Byte
bytes = StrConv("Xmas", vbFromUnicode)

dadurch erhalten Sie {88,109,97,115}. In diesem Fall können Sie das Byte-Array jedoch nicht wieder einem String zuweisen.
Sie können die Zahlen im Bytearray mit der Funktion Chr () wieder in Zeichen umwandeln

13

Hier ist eine andere Möglichkeit, dies in VBA zu tun.

Function ConvertToArray(ByVal value As String)
    value = StrConv(value, vbUnicode)
    ConvertToArray = Split(Left(value, Len(value) - 1), vbNullChar)
End Function
Sub example()
    Dim originalString As String
    originalString = "hi there"
    Dim myArray() As String
    myArray = ConvertToArray(originalString)
End Sub
10
Daniel

Laut diese Code-Golflösung von Gaffi funktioniert folgendes:

a = Split(StrConv(s, 64), Chr(0))
2
q335r49

das Problem ist, dass es keine eingebaute Methode gibt (oder zumindest keiner von uns könnte eine finden), um dies in vb zu tun. Es gibt jedoch eine Möglichkeit, eine Zeichenfolge in die Leerzeichen aufzuteilen, sodass ich sie einfach neu aufbauen und in Leerzeichen einfügen muss. 

Private Function characterArray(ByVal my_string As String) As String()
  'create a temporary string to store a new string of the same characters with spaces
  Dim tempString As String = ""
  'cycle through the characters and rebuild my_string as a string with spaces 
  'and assign the result to tempString.  
  For Each c In my_string
     tempString &= c & " "
  Next
  'return return tempString as a character array.  
  Return tempString.Split()
End Function
0
user3738926