Caractère \"Chr(0) surprenant!

Luki

XLDnaute Accro
Bonsoir le forum,

Confronté à une difficulté en voulant lire une liste déléments dans une clé du registre, je viens de découvrir une particularité étonnante du caractère « Chr(0) » utilisé dans une chaîne : Si on veux utiliser la chaîne complète, elle set tronquée au premier Chr(0) rencontré !
Jimagine que les pros connaissent ça par cSur et quils ont des explications (que jattends avec impatience !) mais il y a aussi les autres, dont je fais partie !

Alors je vous propose cette macro pour que vous puissiez vérifier vous-même&

A + :)

Sub Essai_Chr0()

Dim Rg As Range, C As Range
Dim Str As String, Msg As String
Dim i As Integer, EndStr As Integer

Set Rg = Range('A1:A4')
Cells(1, 1) = 'Bonjour'
Cells(2, 1) = 'Chers'
Cells(3, 1) = 'ami(e)s'
Cells(4, 1) = 'Xldien(ne)'

Str = ''
'Crée la chaîne, le caractère '_' sépare les éléments:
For Each C In Rg
Str = Str & C & ' '
Next C
Range('A6') = Str ' tout va bien, la chaîne est complète

Str = ''
'Crée la chaîne, le caractère Chr(0) sépare les éléments:
For Each C In Rg
Str = Str & C & Chr(0)
Next C
Range('A8') = Str 'La chaîne est tronquée!

'mais elle est exploitable en évitant les Chr(0):
i = 1
Do Until Len(Str) = 0
If Len(Str) <= 1 Then Exit Do ' si elle ne finit pas par Chr(0)
EndStr = InStr(1, Str, Chr(0))
Msg = Left(Str, EndStr - 1)
Str = Right(Str, Len(Str) - EndStr)
Cells(i, 3) = Msg
i = i + 1
Loop

End Sub



Edition!!!

Tiens, au passage, ce sera ma petite contribution pour le 300ème que j'ai loupé!

Message édité par: luki, à: 18/12/2005 23:20
 
A

arthix

Guest
Re:Caractère "Chr(0) surprenant!

Effectivement, comme en C par exemple, Chr(0), le caractère nul, symbolise la fin d'un chaîne de caractères. Tu pourras également le rencontrer sous la forme de \\0 ou 0x00 si tu fais du C

A+
arthix
 
A

arthix

Guest
Re:Caractère "Chr(0) surprenant!

yep,
je me rend compte en me relisant qu'il y a un caractère qui n'est pas passé, je parlais de antislash0 \\0 ou de 0x00 ... mais faut croire que pour ce forum \\ est considéré comme caractère d'échappement (bieeeeeen)
A+
 

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 822
dernier inscrit
kader55