FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Biomorphe de Pickover
par silverman Aujourd'hui à 13:34

» Virus/Antivirus
par silverman Aujourd'hui à 12:07

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Dim 23 Sep 2018 - 22:14

» Planétarium virtuel.
par Pedro Alvarez Dim 23 Sep 2018 - 19:50

» Calculatrice
par papydall Ven 21 Sep 2018 - 22:45

» Orbites de l’ensemble de Mandelbrot
par Minibug Ven 21 Sep 2018 - 21:32

» Demande pour Jack concernant PanExpress
par Minibug Ven 21 Sep 2018 - 11:04

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Bug avec les fonctions lower$ et upper$.

Aller en bas 
AuteurMessage
Pedro Alvarez

avatar

Nombre de messages : 1180
Date d'inscription : 19/01/2014

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Pedro Alvarez

avatar

Nombre de messages : 1180
Date d'inscription : 19/01/2014

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
silverman

avatar

Nombre de messages : 677
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
xxx



Nombre de messages : 261
Date d'inscription : 30/03/2018

MessageSujet: 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$  = "ÀÂÄÇÉÈÊÎÏÎÔÖÛÜ"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Bug avec les fonctions lower$ et upper$.   

Revenir en haut Aller en bas
 
Bug avec les fonctions lower$ et upper$.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» j ai des souci , je debute depuis ce jour avec linux fedora
» Lecture video interrompue avec mise en tampon
» probleme avec les cellules d'excel sur la mise en forme
» [Résolu]Mis a jour impossible avec Antivir
» [Résolu] Problème avec psg tv

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Un bug dans PANORAMIC?-
Sauter vers: