Bonjour Bernard et Laurent,
Bernard Marcelly wrote:
At 2004-08-02 17:50, Laurent Godard wrote:
Bonjour,
La solution de Bernard fonctionne, pas de problemes
Oui, mais pas complètement.
En fait pour que la fonction ne soit pas appelée lors du test
d'existance, il faut lui passer des paramètres incohérents (plutôt que
aucun comme le propose Bernanrd), car si les paramètres ne sont pas
utilisés dans la fonction, OOoBasic ne génère pas d'erreur !
Et en plus, si une fonction de même nom existe dans un autre module,
OOoBasic prend l'initiative de l'exécuter !!! à la place de celle absente.
Exemple :
Module modA
function fonc1
function fonc2
Module modB
function fonc2
modB.fonc1 exécute modA.fonc1 (pas cool :-()
Voici une autre approche manipulant les modules et library de OOo
( . .)
'monModule est une chaine de caractere
'On y recherche la fonction GetStarOfficeLocale()
if instr(monModule,"Function GetStarOfficeLocale()")<>0 then
print "La fontion est présente"
else
print "la fonction est absente"
endif
Oui, mais si on n'a aucune garantie sur le contenu du module on aura
des surprises:
- s'il y a un espace de plus ou une tabulation entre Function et
GetStarOfficeLocale on ne verra pas la définition
- pareil s'il y a un espace entre GetStarOfficeLocale et la première
parenthèse, etc
- pareil si on n'a pas utilisé de parenthèse
- on détectera à tort la définition si elle se trouve dans un
commentaire ou dans un string
- si on a défini une Sub avec ce nom on ne la détectera pas.
Bref, il faudrait faire une analyse syntaxique complète, et ç'est pas
évident !
Je n'irai pas jusque là mais, j'ai commencé a faire une fonction qui
permet de s'affranchir de :
- la casse
- les espaces
- la mise en commentaires
Le résultat sera enregistré dans des variables statiques pour ne pas
faire le boulot plusieurs fois
Merci pour vos réponses
Bonne journée