OVH Cloud OVH Cloud

Code Ascii / ansi

11 réponses
Avatar
Dave
Salut à tous et au MVP
Petite question :
Quand je fais chr(49) j'ai 1 (ok j'assure comme un fou :)
Quand je fais Chr(58) j'ai : (bis repetita :)
quand je fais "1">":" ça répond vrai, alors là je suis perdu ..
j'ai besoin de faire des string de type "PO1-1", "PO1-1-1" et PO1-2", en
classement j'ai "PO1-1" puis "PO1-2" et "PO1-1-1" Pa normal pour moi ...
comment puis faire pour donner un classement qui tienne compte des valeurs
Chr ...
Je sais c'est une question de naz, mais c'est lundi matin, alors j'ose
Merci de votre aide
Dave

--
Merci de votre soutient et aux travails des MVP

10 réponses

1 2
Avatar
Eric
Bonjour,

Si tu veux comparer les chaines de caracères en différenciant Maj/Min,
..., utilises plutôt la fonction StrComp()

Avec l'instruction par défaut dans les modules Option Compare Database,
la procédure ci-dessous :
Private Sub zz()
Debug.Print Asc("1"), Asc(":")
Debug.Print ("1" > ":")
End Sub
retourne :
49 58
Vrai

Avec l'instruction Option Compare Binary
49 58
Faux

Mais quelle que soit l'Option Compare:
Private Sub zz()
Debug.Print StrComp("1", ":", vbBinaryCompare)
End Sub

retournera toujours -1 (soit Vrai) c'est à dire que "1" est inférieur à ":"

Pour plus d'infos, voir l'aide sur Option Compare et StrConv()

Salut à tous et au MVP
Petite question :
Quand je fais chr(49) j'ai 1 (ok j'assure comme un fou :)
Quand je fais Chr(58) j'ai : (bis repetita :)
quand je fais "1">":" ça répond vrai, alors là je suis perdu ..
j'ai besoin de faire des string de type "PO1-1", "PO1-1-1" et PO1-2", en
classement j'ai "PO1-1" puis "PO1-2" et "PO1-1-1" Pa normal pour moi ...
comment puis faire pour donner un classement qui tienne compte des valeurs
Chr ...
Je sais c'est une question de naz, mais c'est lundi matin, alors j'ose
Merci de votre aide
Dave



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Papy Bernard
Slt,

De "Dave"

Salut à tous et au MVP
Petite question :
Quand je fais chr(49) j'ai 1 (ok j'assure comme un fou :)
Quand je fais Chr(58) j'ai : (bis repetita :)
quand je fais "1">":" ça répond vrai, alors là je suis perdu ..
j'ai besoin de faire des string de type "PO1-1", "PO1-1-1" et PO1-2", en
classement j'ai "PO1-1" puis "PO1-2" et "PO1-1-1" Pa normal pour moi ...
comment puis faire pour donner un classement qui tienne compte des valeurs
Chr ...
Je sais c'est une question de naz, mais c'est lundi matin, alors j'ose
Merci de votre aide
Dave

--


C e n'est pas une question ASCII/ANSI. -qui sont différents seulement
au-delà de128-.

Le tri sur une chaine de caractères se fait successivement sur le poids des
caractères et à longueur de chaine égale.
C'est la raison pour laquelle des fichiers se référant à des dates doivent
être enregistrés au format aaaammjj.* et non jjmmaaaa.*.

--
A+
Papy Bernard (RTCien malgré lui)

Avatar
Dave
Merci éric, la fonction STRCOnV(string, 128) m'a en partie sauvé la vie, j'ai
du établir un double trie, d'abord sur STRCOnV(string, 128) puis sur String
lui méme soit un "order by strconv([table].nuple,128), nuple). Pourquoi ai je
donc besoin de ce second trie, je ne comprend pas
Maintenant en mode dynamique sur le formulaire, comment le proser le trie
croissant (click droit sur rubrique) tenant compte de ce strconv ...
Question annexe as tu une syntaxe pour piloter la propriété orderby du
formulaire stp ...
Merci de ton aide ..
dave
--
Merci de votre soutient et aux travails des MVP



Bonjour,

Si tu veux comparer les chaines de caracères en différenciant Maj/Min,
...., utilises plutôt la fonction StrComp()

Avec l'instruction par défaut dans les modules Option Compare Database,
la procédure ci-dessous :
Private Sub zz()
Debug.Print Asc("1"), Asc(":")
Debug.Print ("1" > ":")
End Sub
retourne :
49 58
Vrai

Avec l'instruction Option Compare Binary
49 58
Faux

Mais quelle que soit l'Option Compare:
Private Sub zz()
Debug.Print StrComp("1", ":", vbBinaryCompare)
End Sub

retournera toujours -1 (soit Vrai) c'est à dire que "1" est inférieur à ":"

Pour plus d'infos, voir l'aide sur Option Compare et StrConv()

Salut à tous et au MVP
Petite question :
Quand je fais chr(49) j'ai 1 (ok j'assure comme un fou :)
Quand je fais Chr(58) j'ai : (bis repetita :)
quand je fais "1">":" ça répond vrai, alors là je suis perdu ..
j'ai besoin de faire des string de type "PO1-1", "PO1-1-1" et PO1-2", en
classement j'ai "PO1-1" puis "PO1-2" et "PO1-1-1" Pa normal pour moi ...
comment puis faire pour donner un classement qui tienne compte des valeurs
Chr ...
Je sais c'est une question de naz, mais c'est lundi matin, alors j'ose
Merci de votre aide
Dave



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Dave
Bernard :
Merci de ton aimable réponse, mais au deumeurant je ne saisie pas trop ta
réponse, c'est certainement que j'ai mal exprimé la demande.
Soit une formulaire composé de 10 rubriques string 20. en mode continue du
formualire, j'ai la fonction tri croissant qui m'autorise à trier ce dernier
sur la rubrique de mon choix. Lorsque je fais ce trie sur une rubrique
particulière (qui propose l'équivalent d'une gestion de chapitrage), les
règles de pesage des chaînes ne me semble pas correcte. En effet la réponse à
"PO1-10-1" > "PO1-1-1" est faux, donc le classement de "PO1-10-1" se fait
avant "PO1-1-1", ceci me semble OK puisque le code ascii de "-" est inférieur
à celui de "0". Sauf que lorsque je fais "PO1/10/1" > "PO1/1/1", la réponse
est vrai, avec un code ascii de "/" inferieur à celui de"0". Là je suis un
peu largué... Théoriquement ("PO1-10-1" > "PO1-1-1" ) = ("PO1/10/1" >
"PO1/1/1" ) non ? puisque asc("-") et asc("/") sont tout deux < asc("0")
....
MErci de ta réponse, au deumeurant, ça veut dire quoi RTCien stp ..
DAve
Merci de votre soutient et aux travails des MVP



Slt,

De "Dave"

Salut à tous et au MVP
Petite question :
Quand je fais chr(49) j'ai 1 (ok j'assure comme un fou :)
Quand je fais Chr(58) j'ai : (bis repetita :)
quand je fais "1">":" ça répond vrai, alors là je suis perdu ..
j'ai besoin de faire des string de type "PO1-1", "PO1-1-1" et PO1-2", en
classement j'ai "PO1-1" puis "PO1-2" et "PO1-1-1" Pa normal pour moi ...
comment puis faire pour donner un classement qui tienne compte des valeurs
Chr ...
Je sais c'est une question de naz, mais c'est lundi matin, alors j'ose
Merci de votre aide
Dave

--


C e n'est pas une question ASCII/ANSI. -qui sont différents seulement
au-delà de128-.

Le tri sur une chaine de caractères se fait successivement sur le poids des
caractères et à longueur de chaine égale.
C'est la raison pour laquelle des fichiers se référant à des dates doivent
être enregistrés au format aaaammjj.* et non jjmmaaaa.*.

--
A+
Papy Bernard (RTCien malgré lui)






Avatar
3stone
Salut,

"Dave"
| Merci de ton aimable réponse, mais au deumeurant je ne saisie pas trop ta
| réponse, c'est certainement que j'ai mal exprimé la demande.
| Soit une formulaire composé de 10 rubriques string 20. en mode continue du
| formualire, j'ai la fonction tri croissant qui m'autorise à trier ce dernier
| sur la rubrique de mon choix. Lorsque je fais ce trie sur une rubrique
| particulière (qui propose l'équivalent d'une gestion de chapitrage), les
| règles de pesage des chaînes ne me semble pas correcte. En effet la réponse à
| "PO1-10-1" > "PO1-1-1" est faux, donc le classement de "PO1-10-1" se fait
| avant "PO1-1-1", ceci me semble OK puisque le code ascii de "-" est inférieur
| à celui de "0". Sauf que lorsque je fais "PO1/10/1" > "PO1/1/1", la réponse
| est vrai, avec un code ascii de "/" inferieur à celui de"0". Là je suis un
| peu largué... Théoriquement ("PO1-10-1" > "PO1-1-1" ) = ("PO1/10/1" >
| "PO1/1/1" ) non ? puisque asc("-") et asc("/") sont tout deux < asc("0")


Tu peux faire quelque chose comme ceci.

- Tu réalise le tri sur les valeurs "utilises" de ta chaine...

order by replace(champ;"-";"")

pour qu'il ne tienne pas compte des séparateurs.

Où bien, se poser la question si le format du champ est bien choisi,
et si un seul champ est approprié.


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Dave
3stone, merci de ta réponse, elle est pleine de bon sens. Cepedant, cette
dernière ne m'explique pas la logique de pesage des chaînes que je rencontre.
Tu as raisons, je peux trouver ou prendre une solution paliative, cependant,
il me semble important dans un outils comme Access de pouvoir comprendre la
logique d'une indexation ou d'un pesage de chaine ...
Cette question reviendra dans mon activité, dans certains cas sans solution
d'élision ... alors si MS peux m'expliquer pourquoi :
Théoriquement ("PO1-10-1" > "PO1-1-1" ) = ("PO1/10/1" >
"PO1/1/1" ) puisque asc("-") et asc("/") sont tout deux < asc("0") alors que non dans access .... voir la formulation du problème ....plus haut dans la news ...



--
Merci de votre soutient et aux travails des MVP



Salut,

"Dave"
| Merci de ton aimable réponse, mais au deumeurant je ne saisie pas trop ta
| réponse, c'est certainement que j'ai mal exprimé la demande.
| Soit une formulaire composé de 10 rubriques string 20. en mode continue du
| formualire, j'ai la fonction tri croissant qui m'autorise à trier ce dernier
| sur la rubrique de mon choix. Lorsque je fais ce trie sur une rubrique
| particulière (qui propose l'équivalent d'une gestion de chapitrage), les
| règles de pesage des chaînes ne me semble pas correcte. En effet la réponse à
| "PO1-10-1" > "PO1-1-1" est faux, donc le classement de "PO1-10-1" se fait
| avant "PO1-1-1", ceci me semble OK puisque le code ascii de "-" est inférieur
| à celui de "0". Sauf que lorsque je fais "PO1/10/1" > "PO1/1/1", la réponse
| est vrai, avec un code ascii de "/" inferieur à celui de"0". Là je suis un
| peu largué... Théoriquement ("PO1-10-1" > "PO1-1-1" ) = ("PO1/10/1" >
| "PO1/1/1" ) non ? puisque asc("-") et asc("/") sont tout deux < asc("0")


Tu peux faire quelque chose comme ceci.

- Tu réalise le tri sur les valeurs "utilises" de ta chaine...

order by replace(champ;"-";"")

pour qu'il ne tienne pas compte des séparateurs.

Où bien, se poser la question si le format du champ est bien choisi,
et si un seul champ est approprié.


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/




Avatar
3stone
re,

"Dave"
[...]
alors si MS peux m'expliquer pourquoi :

si tu souhaite que MS te réponde, demande leur directement ;-)


| Théoriquement ("PO1-10-1" > "PO1-1-1" ) = ("PO1/10/1" >
| > "PO1/1/1" ) puisque asc("-") et asc("/") sont tout deux < asc("0") alors que non dans access
.... voir la formulation du problème ....plus haut dans la news ...


Les seuls champs qui se trient correctement sont les champs numériques
(et date - un numérique un peu "spécial")

Les champs texte sont correctement triés lorsqu'il ne possèdent que
des caratères alphabétiques, en dehors de tout signe cabalistique ou autre !
Même les caractères accentués ne sont pas forcément triés comme
on le souhaite.

D'où mon intérogation sur le choix des champs !


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Dave
Toutes les aides que j'ai reçu sur ce sujet ont été appréciées merci
Je prend note de ta réponse sur les rubrique numérique et date, merci de
cette information. Cependant, "/" "0" et "-" appartiennent tout trois au code
ascii sans être impactés par des notion d'alphabet zazou ...
3stone, connais tu la procédure pour faire cette escalade sans avoir à
sortir 350 € comme c'était la cas voilà quelque temps avec MS ?
Salutations
Dave


--
Merci de votre soutient et aux travails des MVP



re,

"Dave"
[...]
alors si MS peux m'expliquer pourquoi :

si tu souhaite que MS te réponde, demande leur directement ;-)


| Théoriquement ("PO1-10-1" > "PO1-1-1" ) = ("PO1/10/1" >
| > "PO1/1/1" ) puisque asc("-") et asc("/") sont tout deux < asc("0") alors que non dans access
..... voir la formulation du problème ....plus haut dans la news ...


Les seuls champs qui se trient correctement sont les champs numériques
(et date - un numérique un peu "spécial")

Les champs texte sont correctement triés lorsqu'il ne possèdent que
des caratères alphabétiques, en dehors de tout signe cabalistique ou autre !
Même les caractères accentués ne sont pas forcément triés comme
on le souhaite.

D'où mon intérogation sur le choix des champs !


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/






Avatar
3stone
re,

"Dave"
|Cependant, "/" "0" et "-" appartiennent tout trois au code
| ascii sans être impactés par des notion d'alphabet zazou ...


je t'avais indiqué la piste du "Replace()" pour remplacer
un caractère quelconque par quelque chose d'un poid adapté...


| 3stone, connais tu la procédure pour faire cette escalade sans avoir à
| sortir 350 € comme c'était la cas voilà quelque temps avec MS ?

Je ne vois pas ce qu'il y a à faire escalader...
Tu pense que MS va modifier l'ordre de tri ?
(que par ailleurs je n'ai pas testé. Et de mémoire... ;-(


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Dave
3Stone :
Je ne pense pas que MS modifie en quoique ce soit son code sur access suite
à mes remarques. Je ne pense pas non plus qu'il soit inoportun de poser une
question à une ressource disposant d'information encore plus avancée que
celle des MVP, parce que lié au code ou ayant eu accés à des informations
tierces non publiées.
La notion de replace() est une idée que j'intègre, je suppose que d'autre
solutions existe encore, j'ai d'ailleurs résolu techniquement mon problème en
remplacant "-" par ":". Mais le mieux étant l'enemie du bien, et ayant pour
formation celle d'aller jusqu'à comprendre le pourquoi, et si d'autre
lecteurs bienveillant dispose de cette information, je cherche à connaître le
pseudo algo de pesage de chaîne implémenter dans access 2003 ....
Merci à toi 3stone, le mieux étant de mettre cette question dans celle qui
pourront être un jour retraité ...
Salutations
--
Merci de votre soutient et aux travails des MVP



re,

"Dave"
|Cependant, "/" "0" et "-" appartiennent tout trois au code
| ascii sans être impactés par des notion d'alphabet zazou ...


je t'avais indiqué la piste du "Replace()" pour remplacer
un caractère quelconque par quelque chose d'un poid adapté...


| 3stone, connais tu la procédure pour faire cette escalade sans avoir à
| sortir 350 € comme c'était la cas voilà quelque temps avec MS ?

Je ne vois pas ce qu'il y a à faire escalader...
Tu pense que MS va modifier l'ordre de tri ?
(que par ailleurs je n'ai pas testé. Et de mémoire... ;-(


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/




1 2