Tranformer un string re

Résolu
sfl0208 Messages postés 3 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 30 mars 2011 - 30 mars 2011 à 15:56
sfl0208 Messages postés 3 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 30 mars 2011 - 30 mars 2011 à 17:37
Hello,

j'ai en entrée le string suivant
tableindex="65.86.83.45.83.70.65.82.77.11.65.86.83.45.82.83.69.82.86.69.82"

ces chiffres correspondent a des caractères ascii codé en décimal.

je souhaite pouvoir le décoder pour avoir en sortie le string correspondant mais avec les caractères décodés. la chaine correspond a 2 mots séparés par le caractère "point"
dans l'exemple ci dessus
"AVS-SFARM"."AVS-RSERVER"

pour le moment je fais le bourrin avec une boucle case
select case tableindex
case "1.9.65.86.83.45.83.70.65.82.77.11.65.86.83.45.82.83.69.82.86.69.82.8080"
server_farm = "AVS-SFARM"
real_server = "AVS-RSERVER"
end select

Quelqu un a t il une meilleure idée ?

5 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 mars 2011 à 16:33
Bonjour,

Pour convertir tableIndex :
Dim carAscValues() As String = tableindex.Split("."c)
Dim result As String = String.Empty
For Each carAscValue As String In carAscValues
   result &= Convert.ToChar(CType(carAscValue, Byte))
Next


Par contre je ne vois pas le point qui sépare les deux mots. Si on décode, la séparation est faite pas un espace.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 mars 2011 à 16:58
Salut

Non, il faut retravailler la chaine de chiffres pour refabriquer la chaine String.
Si tu mets des tests particuliers dans ton programme, il faudra le modifier le jour où ces mots changent ! impensable.

Il te faut donc simplement faire un Split de ta chaine et de faire une boucle.
Dim aTable() As String = "65.86.83.45.83.70.65.82.77.11.65.86.83.45.82.83.69.82.86.69.82".Split(".")
Dim sResult As String = ""
For r As Integer = LBound(aTable) To UBound(aTable)
    sResult = sResult & Chr(aTable(r))
Next
Debug.Print(sResult)

A noter que le séparateur entre tes deux textes "AVS-SFARM"."AVS-RSERVER" n'est pas un point, mais le code Ascii 11.
Tu pourrais alors extraire les deux textes avec un Split
aTable = sResult.Split(Chr(11))
Debug.Print("Premier texte" & vbTab & aTable(0) & vbCrLf & "Deuxième texte" & vbTab & aTable(1))

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 mars 2011 à 17:07
Il y a aussi cette méthode que je trouve plustot simpa :
Dim carAscValues() As String = tableindex.Split("."c)
Dim carAscByteValues() As Byte = Array.ConvertAll(Of String, Byte)(carAscValues, New Converter(Of String, Byte)(AddressOf StringToByte))
Dim result As String = System.Text.Encoding.ASCII.GetString(carAscByteValues)


Il faut juste ajouter la fonction
Private Function StringToByte(ByVal value As String) As Byte
   Return CType(value, Byte)
End Function


Ca permet de voir la notion de convertion de table.
0
sfl0208 Messages postés 3 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 30 mars 2011
30 mars 2011 à 17:15
ca fonctionne
on dirait que le premier tableindex n'est pas decodé, as tu une idée ?
pour les autres impeccable

j'ai essaye de remplacer le caractere espace par un tiret mais sans succes...

Dim carAscValues() As String = tableindex.Split("."c)
Dim result As String = String.Empty
For Each carAscValue As String In carAscValues
if carascvalue = " " then
carascvalue & = "-"
end if
result &= Convert.ToChar(CType(carAscValue, Byte))
Next

Les 2 mots sont collés
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sfl0208 Messages postés 3 Date d'inscription mercredi 30 mars 2011 Statut Membre Dernière intervention 30 mars 2011
30 mars 2011 à 17:37
oups effectivement c'est un VT chr(11)
je vais essayer de le remplacer par un tiret par ex

et voir pourquoi mon premier element de tableindex n'est pas converti

dans tous les cas, merci beaucoup
0
Rejoignez-nous