PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Caractère <ESP> dans une chaîne texte
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
Esp c'est le caractère espace insécable 160 ,
tu doit faire remplace(ch1,caract(160)," ")
voir : https://doc.windev.com/fr-FR/…
cependant celui-ci peut avoir d'autres valeur
voir : https://fr.m.wikipedia.org/wiki/Espace_ins%C3%A9cable
donc il faut essayer avec toutes les valeurs possible
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]] = " " //correspond à la valeur ascii 32 en décimal
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)