Comparer un caractere en hexadecimal : syntaxe? pour definir hexa

Résolu
cs_PeD Messages postés 63 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 13 avril 2013 - 21 juil. 2011 à 11:40
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 21 juil. 2011 à 20:55
Pouff! Parfois je me dis que je ne suis pas trop malin, ou que je ne suis pas fûté, ou que je n'ai pas bien cherché dans les forums, ou dans la doc; parfois aussi je me dis que l'on pourrait faire simple......

Mon bête problème : j'ai un champ qui contient des caractères à remplacer par des espaces.
Ces caractères ne sont pas des caractères de type lettres ou chiffres : du genre en hexa 0D 0A ...
Je me réfère à la traduction ASCII via UltraEdit et j'obtiens ceci ( extrait)
pour mon champ ZCMP013A :

0D 0A 0D 0A 43 52 45 41 54 45 ...
5B 49 4E 52 5F 49 44 5D 20 5B ...

où 5B est le caractère [ que je veux par exemple remplacer par un espace .

Voilà tout ce que j'ai essayé
While InStr(ZCMP013A, Hex(91)) <> 0
ZCMP013A = Replace(ZCMP013A, Hex(91), "")
End While
While InStr(ZCMP013A, Asc(91)) <> 0
ZCMP013A = Replace(ZCMP013A, Asc(91), "")
End While
While InStr(ZCMP013A, Hex("91")) <> 0
ZCMP013A = Replace(ZCMP013A, Hex(?91?), "")
End While
While InStr(ZCMP013A, Asc("91")) <> 0
ZCMP013A = Replace(ZCMP013A, Asc(?91?), "")
End While
While InStr(ZCMP013A, Asc("95")) <> 0
ZCMP013A = Replace(ZCMP013A, Asc(?95?), "")
End While
While InStr(ZCMP013A, Hex(&H5B)) <> 0
ZCMP013A = Replace(ZCMP013A, Hex(&H5B), "")
End While
While InStr(ZCMP013A, &H5B) <> 0
ZCMP013A = Replace(ZCMP013A, &H5B, "")
End While
While InStr(ZCMP013A, "&H5B") <> 0
ZCMP013A = Replace(ZCMP013A, ?&H5B?, "")
End While
While InStr(ZCMP013A, Val(&H5B)) <> 0
ZCMP013A = Replace(ZCMP013A, Val(&H5B), "")
End While
>>> OK >>>  While InStr(ZCMP013A, "[") <> 0
ZCMP013A = Replace(ZCMP013A, "[", " ")
End While


il n'y a que la dernière comparaison qui satisfait à la condition c'est à dire "["

Quelqu'un peut il me donner des indications sur la syntaxe?

Merci


Pierre

3 réponses

cs_PeD Messages postés 63 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 13 avril 2013
21 juil. 2011 à 20:03
Plus clair ( les couleurs, dans code cela ne fonctionne pas )

While InStr(ZCMP013A, Chr(91)) <> 0
ZCMP013A = Replace(ZCMP013A,  Chr(91)), "")
End While


Pierre
3
cs_PeD Messages postés 63 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 13 avril 2013
21 juil. 2011 à 20:00
Bingo !

Après recherches et essais ( perte de temps ! en tout consommation de temps !! ), voici ce qu'il faut faire.
Ne pas être omnubilé par le mot "conversion" mais simplement par la représentation.
Utiliser non pas HEX mais bien CHR

Donc le code qui fonctionne est
While InStr(ZCMP013A, Chr(91)) <> 0
ZCMP013A = Replace(ZCMP013A, Chr(91), "")
End While



Pierre
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 juil. 2011 à 20:55
Bonjour,

Si Tu es en VB.NET (comme tu as classé ton message), je te conseillerais de :
- Eviter InStr, mais préférer MaChaine.Contains ou MaChaine.IndexOf selon les besoins
- Hex, Val(&h ..), ASC, Chr à remplacer respectivement par :
Chaine=MonEntier.ToString("X2")
MonEntier=Integer.Parse(Chaine, Hexadecimal) 'Voir dans la liste de l'énumération le nom exacte du 2ième paramètre
Char.ToUtf32
Char.FromUtf32

Ca fera plus .NET.

Mon site
0
Rejoignez-nous