pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: Pour Klaus et Jack: création de fonctions inexistantes. Jeu 5 Déc 2013 - 10:56 | |
| Bonjour. Voici le code d'un petit programme sans prétention, permettant d'ajouter de nouvelles fonctions à Panoramic. Ce code est facile à appréhender. Qu'en pensez-vous ? Merci de vos remarques éventuelles. - Code:
-
dim a$, b$, variable_retour$, fonction$, liste_argument$, resultat$, temporaire$, t$ dim argument$(10) dim parametre dim kk%, res%, true%, yy%
true%=1
label traiter_fonction
edit 100 left 100,-200 on_change 100,traiter_fonction
' Placer les arguments chaînes entre '' et non entre "".
text 100,"b$=TrimLeft$('-----Bonjour','-')" message b$
text 100,"yy%=Instring('Bonjour','j',3)" message str$(yy%)
text 100,"b$=Flip$('Bonjour')" message b$
parametre=450 text 100,"yy%=Wrap(parametre)" message str$(yy%)
end
traiter_fonction:
t$=text$(100) if len(t$)>0 t$=left$(t$,len(t$)-1)
yy%=instr(t$,"=") variable_retour$=left$(t$,yy%-1) t$=mid$(t$,yy%+1,len(t$))
yy%=instr(t$,"(") fonction$=left$(t$,yy%-1) liste_argument$=mid$(t$,yy%+1,len(t$)) lire_arguments() traiter_fonction() enregistrer_resultat() end_if return
sub lire_arguments()
kk%=0 while true%=1 kk%=kk%+1 yy%=instr(liste_argument$,",") if yy%=0 argument$(kk%)=liste_argument$ else argument$(kk%)=left$(liste_argument$,yy%-1) end_if if left$(argument$(kk%),1)="'" then argument$(kk%)=mid$(argument$(kk%),2,len(argument$(kk%))-2)
' Le parametre est la variable 'parametre'. if argument$(kk%)="parametre" then argument$(kk%)=str$(parametre)
if yy%=0 then exit_while
liste_argument$=mid$(liste_argument$,yy%+1,len(liste_argument$)) end_while
end_sub
sub traiter_fonction()
if fonction$="TrimLeft$" resultat$=argument$(1)
while true%=1 if left$(resultat$,1)<>argument$(2) then exit_while resultat$=mid$(resultat$,2,len(resultat$)) end_while end_if
if fonction$="Instring" res%=val(argument$(3))-1+instr(mid$(argument$(1),val(argument$(3)),len(argument$(1))),argument$(2)) if res%<val(argument$(3)) then res%=0 end_if if fonction$="Flip$" resultat$="" for kk%=len(argument$(1)) to 1 step -1 resultat$=resultat$+mid$(argument$(1),kk%,1) next kk% end_if
if fonction$="Wrap" then res%=wrap_value(val(argument$(1))) end_sub
sub enregistrer_resultat()
if variable_retour$="a$" then a$=resultat$ if variable_retour$="b$" then b$=resultat$ if variable_retour$="yy%" then yy%=res% end_sub | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Pour Klaus et Jack: création de fonctions inexistantes. Jeu 5 Déc 2013 - 11:42 | |
| C'est une technique intéressante. Tu utlises l'évènement ON_CHANGE pour provoquer l'exécution de ce que l'on peut appeler un interpréteur, dont la structure est fournie par toi et dans lequel chacun peut accrocher l'implémentation de ses propres fonctions. Ces implémentations sont réalisées en Panoramic.
C'est une autre façon de faire ce qu'on peut faire avec les procédures. Plus souple sur certains aspects, mais également plus contraignant sur d'autres. En tout cas, une technique intéressante qu'il convient de garder dans la panoplie des solutions possibles ! | |
|