web-dev-qa-db-fra.com

Fractionner la chaîne en un tableau de caractères?

Comment est-il possible de scinder une chaîne VBA en un tableau de caractères? 

J'ai essayé Split(my_string, "") mais cela n'a pas fonctionné.

21
mezamorphic

Le plus simple et le plus sûr est de simplement boucler;

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

Si vous êtes assuré d'utiliser uniquement des caractères ansi, vous le pouvez;

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

Vous pouvez simplement assigner la chaîne à un tableau d'octets (l'inverse est également possible). Le résultat est 2 nombres pour chaque caractère, donc Xmas est converti en tableau d'octets contenant {88,0,109,0,97,0,115,0}
ou vous pouvez utiliser StrConv

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

ce qui vous donnera {88,109,97,115}, mais dans ce cas, vous ne pouvez pas affecter le tableau d'octets à une chaîne.
Vous pouvez reconvertir les nombres du tableau d'octets en caractères à l'aide de la fonction Chr ().

13
Charles Williams

Voici une autre façon de le faire dans VBA.

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

le problème est qu'il n'y a pas de méthode intégrée (ou du moins aucun d'entre nous n'a pu en trouver une) pour le faire en vb. Cependant, il y en a un pour diviser une chaîne sur les espaces, alors je viens de reconstruire la chaîne et de l'ajouter dans des espaces .... 

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