Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Bug avec les fonctions lower$ et upper$. | |
| | Auteur | Message |
---|
Pedro
Nombre de messages : 1596 Date d'inscription : 19/01/2014
| Sujet: Bug avec les fonctions lower$ et upper$. Ven 23 Oct 2015 - 18:33 | |
| Bonjour.
La commande suivante message lower$("ÀÇÉÈÊÎÏÔÛ") retourne un résultat erroné ! Il en est de même avec upper$().
Je pense qu'il s'agit d'un bug.
Il ne manquerait plus qu'il faille gérer indépendamment ces commandes en fonction des caractères !! Ce serait le comble, et là je dis 'non'.
Ces commandes devraient gérer correctement les caractères accentués. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Bug avec les fonctions lower$ et upper$. Ven 23 Oct 2015 - 19:12 | |
| Les caractères accentués français sont ambigues dans leur utilisatiion. Normalement, en impression, on ne les utilise pas. Et pour cette raison, les fonctions uppper$ et lower les ignore. Je t'ai fait une petite sub qui remplace la fonction lower$. A toi de faire le symmétrique pour upper$: - Code:
-
Lowercase("ÀÇÉÈÊÎÏÔÛ") message Lowercase$ end
sub Lowercase(txt$) dim_local clow$, cup$, i%, l%, c%, t$ if variable("LowerCase$")=0 then dim LowerCase$ clow$ = "àçéèêîïôû" cup$ = "ÀÇÉÈÊÎÏÔÛ" LowerCase$ = Lower$(txt$) l% = len(LowerCase$) if l%=0 then exit_sub for i%=1 to l% c% = instr(cup$,mid$(LowerCase$,i%,1)) if c%>0 if i%>1 t$ = left$(LowerCase$,i%-1) else t$ = "" end_if t$ = t$ + mid$(clow$,c%,1) if i%<l% then t$ = t$ + mid$(LowerCase$,i%+1,len(LowerCase$)) LowerCase$ = t$ end_if next i% end_sub
Ca marche très bien. | |
| | | Pedro
Nombre de messages : 1596 Date d'inscription : 19/01/2014
| Sujet: Bug avec les fonctions lower$ et upper$. Ven 23 Oct 2015 - 19:55 | |
| Bonsoir.
Merci Klaus. Mais ce serait quand même plus simple si c'était implémenté en local. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Bug avec les fonctions lower$ et upper$. Ven 23 Oct 2015 - 22:59 | |
| Tu as évidemment raison, Pédro. Mais en attendant, je t'ai proposé une solution viable dans l'immédiat, pour ne pa être bloqué. Je pourrais bien sûr faire quelque chose sous forme d'une fonction DLL, mais l'usage n'en sera pas plus simple. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Bug avec les fonctions lower$ et upper$. Ven 23 Oct 2015 - 23:53 | |
| Tiens, cadeau: - Code:
-
dim s1$, s2$, s3$
s1$ = "ÀÇÉÈÊÎÏÔÛ" LowerCase(s1$) s2$ = LowerCase$ UpperCase(s2$) s3$ = UpperCase$ message s1$+" => "+s2$+" => "+s3$
s1$ = "ça m'étonne que le gîte soit déjà ouvert." UpperCase(s1$) s2$ = UpperCase$ LowerCase(s2$) s3$ = LowerCase$ message s1$+chr$(13)+chr$(10)+s2$+chr$(13)+chr$(10)+s3$ end
sub LowerCase(txt$) dim_local clow$, cup$, i%, l%, c%, t$ if variable("LowerCase$")=0 then dim LowerCase$ clow$ = "àçéèêîïôû" cup$ = "ÀÇÉÈÊÎÏÔÛ" LowerCase$ = Lower$(txt$) l% = len(LowerCase$) if l%=0 then exit_sub for i%=1 to l% c% = instr(cup$,mid$(LowerCase$,i%,1)) if c%>0 if i%>1 t$ = left$(LowerCase$,i%-1) else t$ = "" end_if t$ = t$ + mid$(clow$,c%,1) if i%<l% then t$ = t$ + mid$(LowerCase$,i%+1,len(LowerCase$)) LowerCase$ = t$ end_if next i% end_sub
sub UpperCase(txt$) dim_local clow$, cup$, i%, l%, c%, t$ if variable("UpperCase$")=0 then dim UpperCase$ clow$ = "àçéèêîïôû" cup$ = "ÀÇÉÈÊÎÏÔÛ" UpperCase$ = Upper$(txt$) l% = len(UpperCase$) if l%=0 then exit_sub for i%=1 to l% c% = instr(clow$,mid$(UpperCase$,i%,1)) if c%>0 if i%>1 t$ = left$(UpperCase$,i%-1) else t$ = "" end_if t$ = t$ + mid$(cup$,c%,1) if i%<l% then t$ = t$ + mid$(UpperCase$,i%+1,len(UpperCase$)) UpperCase$ = t$ end_if next i% end_sub
| |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Bug avec les fonctions lower$ et upper$. Sam 24 Oct 2015 - 18:18 | |
| Bonjour, @Pedro Alvarez ce n'est pas un bug, chaque pays a des accentuations différentes. LOWER$/UPPER$ ne traitent pas les accents d'un pays en particuler, c'est une fonction générale. C'est au programmeur d' étendre cette fonction selon le pays dans lequel il code. Voici un autre façon de faire, sans découpage de chaine, en changeant directement le code ASCII dans la chaine de caractère à traiter: - Code:
-
dim min$
min$="ÂZÉRTŸUÏŒP"
extend_lower(min$) print min$
end
sub extend_lower(txt$) if variable("adr_destination%")=0 then dim adr_destination%,adr_source%,a$,c$,a,p%,ptr%
adr_source%=adr(txt$) adr_destination% = adr(ptr%) poke adr_destination%,peek(adr_source%) poke adr_destination%+1,peek(adr_source%+1) poke adr_destination%+2,peek(adr_source%+2) poke adr_destination%+3,peek(adr_source%+3)
a$="ÀÂÄÇÈÉÊËÎÏÔÖÙÛÜÆ" :' "ŒŸ" :' majuscule ---> minuscule ' a$="àâäçèéêëîïôöùûüæ" :' "œÿ" :' minuscule ---> majuscule
for a=1 to len(a$) ' "ÀÂÄÇÈÉÊËÎÏÔÖÙÛÜÆ" c$=mid$(a$,a,1) :' caractère à trouver p%=1 repeat :' cherche le caractère p%=instr_pos(txt$,c$,p%) :' en continuant è partir de la position du dernier caractère trouvé if p%>0 :' un caractère est trouvé poke ptr%+p%-1,asc(c$)+32 :' majuscule ---> minuscule ' poke ptr%+p%-1,asc(c$)-32 :' minuscule ---> majuscule end_if until p%=0 :' plus de caractère trouvé, on passe au suivant next a
' "Œ" c$="Œ" p%=1 repeat p%=instr_pos(txt$,c$,p%) if p%>0 poke ptr%+p%-1,asc(c$)+16 :' majuscule ---> minuscule ' poke ptr%+p%-1,asc(c$)-16 :' minuscule ---> majuscule end_if until p%=0
' "Ÿ" c$="Ÿ" p%=1 repeat p%=instr_pos(txt$,c$,p%) if p%>0 poke ptr%+p%-1,asc(c$)+96 :' majuscule ---> minuscule ' poke ptr%+p%-1,asc(c$)-96 :' minuscule ---> majuscule end_if until p%=0 min$=lower$(txt$) end_sub
| |
| | | Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: Re: Bug avec les fonctions lower$ et upper$. Jeu 19 Avr 2018 - 20:42 | |
| J'en profite pour bonifier l'excellent code de Klaus par l'extension de deux lignes dans chacune des deux fonctions : - Code:
-
clow$ = "àâäçéèêîïîôöûü" cup$ = "ÀÂÄÇÉÈÊÎÏÎÔÖÛÜ" | |
| | | Contenu sponsorisé
| Sujet: Re: Bug avec les fonctions lower$ et upper$. | |
| |
| | | | Bug avec les fonctions lower$ et upper$. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |