IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Mutualisation ou réutilisation de code ? (en gros équivalent à l'instruction "Include" de certains langages)


Sujet :

VBScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    resp. cellule urbanisation
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : resp. cellule urbanisation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Points : 34
    Points
    34
    Par défaut Mutualisation ou réutilisation de code ? (en gros équivalent à l'instruction "Include" de certains langages)
    Bonjour,

    Je suis en train d’écrire des scripts utilisables directement depuis une application (PowerAmc pour ne pas la nommer , mais cela peut être une autre application).

    J'ai donc un seul script principal par fichier *.VBS . D'ailleurs environnement d’exécution de PowerAmc, ne reconnait pas sa déclaration comme "sub Main"


    par contre, chacun de ces fichiers, contient un certain nombre de sous programme (SUB ou function) appelés depuis le script principal.

    J'aimerais, si c'est possible (??), mutualiser un certain nombre de ces sous programmes ou fonctions, sans avoir à les recopier systématiquement dans chaque fichier de script.
    Ceci afin de faciliter leur maintenance..

    Mon idée, mais peut être n'est elle pas bonne ou pas possible ...vous me le direz, serait de regrouper ces sous-programmes ou fonction dans un ou plusieurs fichier "bibliothèques". Puis de faire appel à ce(s) fichier(s) (ou aux sous-programmes et fonctions de ces bibliothèques), dans les divers fichiers scripts contenant chacun un seul "Main".

    Je n'ai, malheureusement, pas trouvé de réponses clair sur le sujet...voir des réponses différentes ....

    Donc si quelqu'un pouvait éclairer ma pauvre lanterne de béotien, je lui en serais très reconnaissant.

    D'avance merci.

    PS. vous avez bien compris, que je ne suis pas un développeur chevronné et que je ne maitrise pas tout à fait, le VB script

    André.

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 175
    Points
    17 175
    Par défaut
    Salut

    Il me semble que Les fichiers Windows Script File (.wsf) répondent a ton attente.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,

    lorsque vbscript est exécuté dans le contexte du framework "Windows Script Host", il existe effectivement
    la solution du wsf judicieusement rappelée par ProgElecT

    malheureusement lorsque l'environnement d'exécution est celui d'un programme spécifique
    comme PowerAmc dans ton cas, il n'existe pas de fonction native du VBS pour inclure
    un fichier externe

    la seule solution est de contourner de problème avec une solution de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub includeFile(fSpec)
        executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fSpec).readAll()
    End Sub
    ' le contenu du fichier externe sera exécuté dans le script
    includeFile "monprogexterne.vbi"
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    resp. cellule urbanisation
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : resp. cellule urbanisation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    merci beaucoup à vous deux.

    Je vais essayer la solution d'Omen.
    je vous tiens au courant .....d'ici la fin de la semaine...j’espère...


    A bientôt.

    et encore merci

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    resp. cellule urbanisation
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : resp. cellule urbanisation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Bon,

    j'ai fait un premier essai rapide ...
    ..Mais j'ai une erreur de compilation .

    voici le code dans le script appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    option Explicit
     
    Sub includeFile(fSpec)
        executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fSpec).readAll()
    End Sub
     
    dim Chem_biblio
    Chem_biblio = "U:\Cartos\Scripts"
     
    ' le contenu du fichier externe sera exécuté dans le script
    includeFile Chem_biblio & "\Bibliotheque.vbs"
     
     
    ' -- choix des sorties/impression du script
    set Ch_Sortie = choix_sortie_result
    et voici le message d’erreur que l’obtiens quand je lance l’exécution de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur de compilation Microsoft VBScript
    Fin d'instruction attendue (0x800A0401)
    At line 4, character 5
    ce qui correspond bien au début de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fSpec).readAll()
    .


    je vais essayer de chercher ce qui va pas ...;

    A+
    André

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    j'ai testé mais sous WSH, ça fonctionne

    sinon pour mieux identifier l'erreur il faut décomposer le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub includeFile(fSpec)
    Dim oFSO,oFS,oTxt
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFS = oFSO.openTextFile(fSpec)
    oTxt = oFS.readAll()
    executeGlobal oTxt
    End Sub
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    resp. cellule urbanisation
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : resp. cellule urbanisation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    je viens d'essayer avec la version éclatée de la procédure.

    l'erreur est la même (jusque là rien d'anormal)
    elle se situe à la ligne : .

    peut-être est-ce "tout simplement" que l’environnement d’exécution du VBS sous PowerAmc, ne reconnait pas cette instruction ???

    Comme pour l'instruction WSCript.QUIT => le message d'erreur me dit que l'objet WSCript doit être déclaré
    Or effectivement WSCRipt représente, si j'ai bien compris, un environnement spécifique d'exécution du VBS, différent de celui de PowerAMC.
    => du coup je ne sais pas comment arrêter l’exécution d'un script (EXIT SUB ne fonctionnant pas dans le Main, qui n'est pas déclarer par 'Sub Main')...

  8. #8
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    peut-être est-ce "tout simplement" que l’environnement d’exécution du VBS sous PowerAmc, ne reconnait pas cette instruction ???
    je ne pense pas, le message d'erreur serait différent
    en revanche, ça suggère que le code contenu dans la chaine oTxt contient quelque chose que le moteur de script ne "digère" pas
    il faudrait faire des tests avec un fichier "bibliotheque.vbs" plus réduit
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    resp. cellule urbanisation
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : resp. cellule urbanisation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    merci Omen,

    c'était bien cela !

    Une erreur dans le fichier Bibliothèque.vbs.

    Une fois corrigée ça marche super bien !!!

    dès que j'ai un peu de temps, je fais une synthèse, et je ferme la discussion.

    Encore un grand merci à Omen !!!

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    resp. cellule urbanisation
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : resp. cellule urbanisation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Points : 34
    Points
    34
    Par défaut synthèse finale
    Bonjour à toutes et tous,

    Comme promis, il y a déjà quelque temps,
    voici la synthèse de cette discussion.

    Une des façons de mutualiser et simplifier la maintenance de son code est de le "découper" en fonctions et sous-procédures simples.
    Parmi ces fonctions et sous-procédures un grand nombre peuvent être réutilisées dans plusieurs scripts différents. Pour cela il est très pratique de les répartir dans un ou plusieurs fichier(s) utilisés comme des bibliothèques (nommés "fichiers bibliothèques" par la suite).

    Dans le cas où l'environnement d'exécution est celui d'un programme spécifique, et non pas Wscript,
    il n'existe pas de fonction native du VBS pour inclure un fichier externe.

    Mais grâce au code d'Omen99, un grand merci à lui, il est possible de faire appel à ces fichiers bibliothèques et donc d'utiliser leurs sous-programmes et fonctions, dans vos fichiers de script principal (équivalent à "Main").

    Voici les deux versions de la procédure permettant l'exécution (lecture) d'un fichier :
    Version longue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub includeFile(fSpec)
    Dim oFSO,oFS,oTxt
    Set oFSO = CreateObject("Scripting.FileSystemObject")  'création d 'un objet de type fichier
    Set oFS = oFSO.openTextFile(fSpec)   ' ouverture du fichier bibliothèque comme un fichier texte
    oTxt = oFS.readAll()     ' Déversement de tout son contenu dans un objet de type texte (chaine de caractère).
    executeGlobal oTxt    ' exécution/lecture du contenu par le moteur d'exécution
    End Sub
    Version courte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub includeFile(fSpec)
        executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fSpec).readAll()
    End Sub
    Puis on appelle cette procédure, en lui passant en paramètre le nom complet (cad : path + nom) du fichier bibliothèque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim Chem_biblio
    Chem_biblio = "U:\Cartos\Scripts"
     
    ' le contenu du fichier externe sera exécuté dans le script
    includeFile Chem_biblio & "\Bibliotheque.vbs"
    On peut ainsi appeler plusieurs fichiers bibliothèques, comme par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' le contenu des fichiers externes seront exécutés dans le script
    includeFile Chem_biblio & "\Bibliotheque.vbs"
    includeFile Chem_biblio & "\travail\biblio_gest_fichier.vbs"
    les fichiers Bibliothèques, peuvent contenir :
    1. des déclarations de variables, de constantes
    2. des fonctions
    3. des procédures



    Problèmes potentiels

    Si à l'exécution de votre script principal, vous avez une erreur non localisée (cad sans référence d'une ligne de code de votre script principal) ou localisé sur l'instruction "executeGlobal …" de la procédure includeFile(fSpec)
    Alors vous avez vraisemblablement une erreur de syntaxe ou d'exécution dans un des fichiers bibliothèques.

    Pour éviter cela, vous pouvez commencer par exécuter manuellement votre fichier bibliothèque :
    pour cela le charger dans votre environnement d'exécution VBSCript, comme s'il s'agissait du script normal, puis de l'exécuter.
    => Les éventuelles erreurs de syntaxes seront alors bien identifiées et localisées.
    => les corriger, sauvegarder le ficher bibliothèque et retester le script principal….

    Pour les erreurs d'exécution, c'est un peu plus compliqué, puisque que généralement les fichiers bibliothèques ne contiennent pas de script directement exécutable (équivalent à la procédure main).
    Vous pouvez alors créer dans votre fichier bibliothèque une procédure de test, comme par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    '-----------------------------------------------------------------------------
    '   programme de test du code de ce fichier
    '    pour cela mettre en commentaire les lignes  "sub test" et "end sub ' test"
    '-----------------------------------------------------------------------------
    sub test 
         init    ' test de la sous procédure d'initialisation
         dim Fich
         dim Ch_Sortie   '-- objet contenant les choix des canaux d'impression (écran; fichier, etc...) 
            set Ch_Sortie = choix_sortie_result     ' -- choix des sorties/impression du script
     
          Fich = choix_fichier    ' test appel de la fonction choix_fichier 
     
          restaur_hidden_symbol Ch_Sortie, Fich  ' test de la procédure 
     
    end sub ' test
    Que vous vous allez activer, (par ex en mettant en commentaire l'instruction "sub test" et "end sub 'test" correspondante, puis exécuter manuellement votre fichier bibliothèque.
    => Après c'est de la recherche et correction classiques de bug …
    Une fois résolu, ne pas oublier de "désactiver" la procédure de test, en décommettant les instructions "sub test" et "end sub 'test"

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    resp. cellule urbanisation
    Inscrit en
    Juin 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : resp. cellule urbanisation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2012
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    j'attends quelques jours,pour d"éventuels commentaires, ajouts, correction, puis je clôture cette discussion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réutilisation de code dans un Namespace
    Par esteph dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/09/2008, 17h31
  2. [Système] Réutilisation de code
    Par Nemesis007 dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2008, 14h02
  3. [c#] réutilisation du code d'une application windows
    Par backfire dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/07/2007, 13h12
  4. [POO] Techniques de réutilisation de code
    Par iwf-fr dans le forum Langage
    Réponses: 8
    Dernier message: 16/12/2006, 14h16
  5. [Juridique] Comment réutiliser le code source d'une classe ?
    Par mathieu dans le forum Général Java
    Réponses: 8
    Dernier message: 17/05/2004, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo