|
| Caractère <ESP> dans une chaîne texte |
| Iniciado por obtuli, 28,mar. 2019 14:21 - 9 respuestas |
| |
| | | |
|
| |
Miembro registrado 961 mensajes |
|
| Publicado el 28,marzo 2019 - 14:21 |
Bonjour,
J'ais un problème de comparaison de chaînes qui donne faux alors qu’apparemment en terme d’affichage elles sont identiques.
En regardant avec le débogueur : ch1="1.<ESP>Livres" et ch2= "1. Livres" (sur le coup, ch1=ch2 donne faux et c'est normal.)
La ch1 vient d'une base de données MySQL (mais certaines données n'ont pas <ESP>)
Cela m'intrigue un peu.
Je ne sais pas d'où vient ce <ESP> , je vais faire un remplacement de <ESP> par " " mais bon ....
Une idée ?
merci
OB |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 961 mensajes |
|
| Publicado el 28,marzo 2019 - 14:32 |
sChaine est une chaîne= remplace(ch1,"<ESP>"," ") donne toujours "1.<ESP>Livres" !
sur le coup mes tests ne sont pas bons. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 28,marzo 2019 - 14:45 |
sChaine est une chaîne= remplace(ch1,"<ESP>"," ") donne toujours "1.<ESP>Livres"
C'est normal, ce que tu vois dans le debugger n'est que la représentation graphique des codes ASCII qui composent ta chaine. (Ta chaine est un en fait un tableau de codes ascii)
Je ne suis pas sur mais <ESP> doit correspondre a 32 dans la table ascii donc :
sChaine est une chaîne= remplace(ch1,Caract(32)," ") // devrait fonctionner !
dans le doute fait un trace(ASC(sChaine[[3]])) pour voir ? Ca devrait te dossier le code ASCII du 3e caractere de ta chaine (Celui qu'on cherche a virer)Mensaje modificado, 28,marzo 2019 - 14:46 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 3.784 mensajes |
|
| Publicado el 28,marzo 2019 - 14:45 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 28,marzo 2019 - 14:48 |
@Popoy Merci , c'est bien 160 et non 32, je venais de m'en rendre compte en lisant un autre poste  |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 24 mensajes |
|
| Publicado el 28,marzo 2019 - 14:53 |
Bonjour,
Dans les jeux de caractères ASCII, il y a 2 types de caractère d'espacement : - l'espace standard (code ASCII 32) - l'espace insécable (code ASCII 160)
Dans le débogueur, WinDev l'espace insécable est matérialisé par la chaine <ESP> afin de le rendre visible. Dans ton code tu dois le remplacer par une constante pour le manipuler :
sChaine est une chaîne= Remplace(ch1,ESP," ")
En complément, je chercherai comment ont été créés ces espaces insécables dans les données. Il n'est pas facile de les saisir au clavier, sûrement un changement de jeu de caractère incorrect. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 961 mensajes |
|
| Publicado el 28,marzo 2019 - 16:41 |
Bonjour,
Merci pour vos réponses.
Remplace(Ch1,ESP," ") ne fonctionne pas non plus. Dans mes chaîne c'est bien le code 160 pour ESP, mais le replace ne fonctionne pas non plus. J'ai fait une moulinette (j'aime pas ce coté verrue) qui remplace le 160 par 32.
Sur le coup, je vais devoir revoir toutes les partie de code où je compare des chaînes.
Encore merci
OB
POUR i=1 _À_ Taille(sChaine) SI Asc(sChaine[[i]]) = 160 ALORS sChaine[[i]] = " " FIN FIN RENVOYER sChaine Mensaje modificado, 28,marzo 2019 - 16:42 |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,marzo 2019 - 09:16 |
Tu as plus simple en une seule ligne de code:
sChaine est une chaîne= remplace(ch1,caract(160)," ") |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 961 mensajes |
|
| Publicado el 29,marzo 2019 - 11:02 |
Bonjour Eric, J'ai un petit doute, mais je pense avoir essayé et ça ne marche pas. merci Cordialement Didier |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,marzo 2019 - 12:20 |
Je t'assure que cela fonctionne. Essaie cela:
sCh1 est une chaîne = ("12345"+Caract(160)+"12345"+Caract(160)+"12345"+Caract(160)+"12345") Trace(sCh1) sCh1=Remplace(sCh1,Caract(160)," ") Trace(sCh1) |
| |
| |
| | | |
|
| | | | |
| | |
|