Copy of Vbscript

download Copy of Vbscript

of 80

  • date post

    09-Jul-2015
  • Category

    Documents

  • view

    138
  • download

    0

Embed Size (px)

Transcript of Copy of Vbscript

INTRODUCTION AU LANGAGE VBSCRIPTpar Serge Tah (tahe.developpez.com)

Date de publication : janvier 2002 Dernire mise jour :

Prsentation du langage VBSCRIPT, langage qui peut servir dans diffrents domaines : langage de script pour les administrateurs systme windows, langage de script au sein de pages HTML, langage d'introduction aux langages Visual Basic et Visual Basic pour Applications.

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

A - Avant Propos I - Les contextes d'excution de VBSCRIPT I-A - Introduction I-B - Le conteneur WSH I-C - La forme d'un script WSH I-D - L'objet WSCRIPT I-E - Le conteneur Internet Explorer I-F - L'aide de WSH II - Les bases de la programmation VBSCRIPT II-A - Afficher des informations II-B - criture des instructions dans un script Vbscript II-C - crire avec la fonction msgBox II-D - les donnes utilisables en Vbscript II-E - les sous-types du type variant II-F - connatre le type exact de la donne contenue dans un variant II-G - dclarer les variables utilises par le script II-H - les fonctions de conversion II-I - lire des donnes tapes au clavier II-J - saisir des donnes avec la fonction inputbox II-K - utiliser des objets structurs II-L - affecter une valeur une variable II-M - valuer des expressions II-N - contrler l'excution du programme II-N-1 - excuter des actions de faon conditionnelle II-N-2 - excuter des actions de faon rpte II-N-3 - Terminer l'excution du programme II-O - les tableaux de donnes dans un variant II-P - les variables tableaux II-Q - les fonctions split et join II-R - Les dictionnaires II-S - Trier un tableau ou un dictionnaire II-T - Les arguments d'un programme II-U - Une premire application : IMPOTS III - La gestion des erreurs III-A - Connatre le type exact d'une donne III-B - Les expressions rgulires III-C - Intercepter les erreurs d'excution III-D - Application au programme de calcul d'impts IV - Les fonctions et procdures IV-A - Les fonctions prdfinies de vbscript IV-B - Programmation modulaire IV-C - Les fonctions et procdures vbscript IV-C-1 - Dclaration des fonctions et procdures vbscript IV-C-2 - Modes de passage des paramtres d'une fonction ou procdure IV-C-3 - Syntaxe d'appel des fonctions et procdures IV-C-4 - Quelques exemples de fonctions IV-C-5 - Paramtre de sortie ou rsultat d'une fonction IV-D - Le programme vbscript de tri de valeurs IV-E - Le programme IMPOTS sous forme modulaire V - Les fichiers texte V-A - Cration et utilisation V-B - Les cas d'erreur V-C - L'application IMPOTS avec un fichier texte

-2Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

A - Avant ProposCe document a pour but de fournir les bases du langage vbscript ainsi que des exemples d'utilisation dans diffrents domaines. VBScript est un langage de script sous Windows. Il peut fonctionner dans diffrents conteneurs tels Windows Scripting Host pour une utilisation directe sous Windows notamment pour crire des scripts d'administration systme Internet Explorer. Il est alors utilis au sein de pages HTML auxquelles il amne une certaine interactivit impossible a atteindre avec le seul langage HTML. Internet Information Server (IIS) le serveur Web de Microsoft sur NT/2000 et son quivalent Personal Web Server (PWS) sur Win9x. Dans ce cas, vbscript est utilis pour faire de la programmation cote serveur web, technologie appele ASP (Active Server Pages) par Microsoft.

Par ailleurs, VBSCRIPT tant un langage driv de Visual Basic pour Windows, il peut servir d'introduction ce langage parmi les plus rpandus dans le domaine Windows ainsi qu' la version Application de VB, appele VBA (Visual Basic pour Applications). VBA est utilis par exemple dans toute la suite Office de Microsoft notamment dans Excel. Ainsi VBSCRIPT est une voie d'entre au dveloppement dans un vaste domaine d'applications windows. VBScript n'est pas un langage a objets mme s'il en a une certaine coloration. La notion d'hritage, par exemple, n'existe pas. Il peut cependant utiliser les objets mis sa disposition par le conteneur dans lequel il s'excute ainsi que plus gnralement les composants ActiveX disponibles sur la machine Windows. C'est cet aspect qui donne sa puissance VBScript, langage qui intrinsquement est assez pauvre mais qui grce aux objets mis a sa disposition peut rivaliser avec des langages de script au dpart plus riches tels Perl, Javascript, Python. C'est un langage simple apprendre, utiliser et qui ouvre la voie a l'utilisation de Visual Basic pour Windows dont il est directement driv. Ce document n'est pas un cours d'algorithmique. L'art de la programmation est suppos acquis. Un travail de lecture actif est ncessaire. La meilleure faon d'utiliser ce document est probablement de tester sur sa propre machine les exemples qui y sont donnes. Le conteneur WSH est normalement livre en standard avec le systme Windows. La version la plus rcente est disponible gratuitement sur le site de Microsoft (http://www.microsoft.com). Pour trouver l'URL exacte permettant le tlchargement de WSH, on pourra chercher les mots cls "Windows Scripting" avec un moteur de recherche sur le Web. Parmi les rponses, on devrait trouver l'URL de tlchargement de WSH.

-3Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

I - Les contextes d'excution de VBSCRIPT I-A - IntroductionUn programme vbscript ne s'excute pas directement sous Windows mais dans un conteneur qui lui fournit un contexte d'excution et un certain nombre d'objets qui lui sont propres. Par ailleurs, le programme vbscript peut utiliser des objets mis sa disposition par le systme Windows, objets appels objets ActiveX.

Dans ce document, nous utiliserons deux conteneurs : Windows Scripting Host appel couramment WSH et le navigateur Internet Explorer appel parfois par la suite IE. Il en existe bien d'autres. Ainsi, les applications MS-Office sont des conteneurs pour un driv de VB appele VBA (Visual Basic pour Applications). Il existe par ailleurs de nombreuses applications windows qui permettent a leurs utilisateurs de dpasser les limites de celle-ci en leur permettant de dvelopper des programmes s'excutant au sein de l'application et utilisant les objets propres a celle-ci.

Le conteneur dans lequel s'excute le programme vbscript joue un rle primordial : les objets mis disposition du programme vbscript par le conteneur changent d'un conteneur l'autre. Ainsi WSH met disposition d'un programme vbs un objet appell WScript qui donne accs, par exemple, aux partages et imprimantes rseau de la machine hte. IE lui, met a disposition du programme vbs, un objet appel document qui reprsente la totalit du document HTML visualis. Le programme vbs va alors pouvoir agir sur ce document. Excel lui met a disposition d'un programme VBA des objets reprsentant des classeurs, des feuilles de classeurs, des graphiques, etc.... en fait tous les objets manipuls par Excel. si les objets d'un conteneur donnent toute sa puissance un programme vbscript, il peut parfois en limiter certains domaines. Ainsi un programme vbscript excut dans le navigateur IE ne peut pas accder au disque de la machine hte, ceci pour des raisons de scurit.

Donc, lorsqu'on parle de programmation vbscript, il faut indiquer dans quel conteneur le programme est excut.

-4Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Sous windows, vbscript n'est pas le seul langage utilisable dans les conteneurs WSH ou IE. On peut par exemple utiliser JScript (=JavaScript), PerlScript (=Perl), Python, ... Nombre de ces langages semblent de prime abord suprieurs a vbscript. Mais ce dernier a cependant de srieux atouts : VB et ses dclinaisons VBSCRIPT et VBA sont trs rpandues sur les machines windows. Connatre ce langage parat indispensable. C'est davantage les objets utilisables par un programme que le langage utilis par celui-ci qui font sa puissance. Or nombre de ces objets sont fournis par les conteneurs et non par les langages eux-mmes.

Un inconvnient de VBSCRIPT est qu'il n'est pas portable sur un systme autre que Windows, par exemple Unix. Ses concurrents Javascript, Perl, Python eux le sont. Si on doit travailler sur des systmes htrognes, il peut tre intressant voire indispensable d'utiliser le mme langage sur les diffrents systmes.

I-B - Le conteneur WSHLe conteneur WSH (Windows Scripting Host) permet l'excution, au sein de Windows, de programmes crits en divers langages : vbscript, javascript, perlscript, python, ... Il existe une norme respecter pour qu'un langage puisse tre utilise au sein de WSH. Tout langage respectant cette norme est candidat l'excution au sein de WSH. On peut imaginer que la liste prcdente des langages s'excutant dans WSH puisse s'allonger. Un conteneur met la disposition des programmes qu'il excute des objets qui leur donnent leur vritable puissance. Ceci tend gommer les diffrences entre langages puisqu'ils utilisent alors tous le mme ensemble d'objets. Utiliser un langage plutt qu'un autre peut devenir alors une simple affaire de got plutt que de performances. L'excution d'un programme dans WSH se fait a l'aide de deux excutables : wscript.exe et cscript.exe. wscript.exe se trouve normalement dans le rpertoire d'installation de windows appelle gnralement %windir% :

C:\ >echo %windir% C:\WINDOWS C:\>dir c:\windows\wscript.exe WSCRIPT EXE 123 280 19/09/01 11:54 wscript.exe

L'excutable cscript.exe se trouve lui sous %windir%\command :

C:\>dir c:\windows\cscript.* /s Repertoire de C:\WINDOWS\COMMAND CSCRIPT EXE 102 450 26/06/01 17:49 cscript.exe

Le w de wscript veut dire windows et le c de cscript veut dire console. Un script peut tre excut indiffremment par wscript ou cscript. La diffrence rside dans le mode d'affichage de messages l'cran : wscript les affiche dans une fentre cscript les affiche l'cran

Voici un script coucou.vbs qui affiche coucou a l'cran :

Ouvrons une fentre DOS et excutons-le successivement avec wscript et cscript :

-5Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

DOS>wscript coucou.vbs

DOS>cscript coucou.vbs Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. Tous droits rservs. coucou On voit ci-dessus clairement la diffrence entre les deux modes. Dans ce document, nous utiliserons quasi exclusivement le mode console cscript. C'est le mode qui convient aux applications dites "batch" c'est dire des applications sans interaction avec un utilisateur au clavier. On notera deux points dans les rsultats prcdents : 1 On a suppos que les excutables wscript.exe et cscript.exe taient tous les deux dans le "PATH" de la machine, ce qui permet de les lancer en tapant simplement leurs noms. Si ce n'tait pas le cas, il aurait fallu crire ici : DOS>c:\windows\wscript coucou.vbs DOS>c:\windows\command\cscript coucou.vbs On notera que la version de wsh utilise dans cet exemple et dans la suite du document est la version 5.6. Le fichier source du script a le suffixe .vbs. C'est le suffixe dsignant un script vbscript, un script javascript tant lui dsign par le suffixe .js.

2 3

Le programme cscript a diverses options de lancement qu'on obtient en lanant cscript sans arguments :

DOS>cscript Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. Tous droits rservs. Utilisation : CScript scriptname.extension [option...] [arguments...] Options: //B batch : Supprime l'affichage des invites et des erreurs de scripts //D Activer le dbogage //E:engine Utiliser le moteur pour l'excution de script //H:CScript Remplace l'environnement d'excution de scripts par dfaut par CScript.exe //H:WScript tRemplace l'environnement d'excution de scripts par dfaut par WScript.exe (default) //I Mode interactif (par dfaut, contraire de l'option //B) //Job :xxxx Excuter une tche WSF //Logo Afficher un logo (default) //Nologo Empcher l'affichage d'un logo : Aucune bannire ne s'affiche pendant la dure d'excution //S Enregistrer les options de ligne de commande actuelles pour cet utilisateur //T:nn Dure d'excution en secondes : Temps maximal autoris pour l'excution d'un script //X Excuter un script dans le dbogueur

-6Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

L'argument //nologo supprime l'affichage de la bannire de wsh : C:\>cscript //nologo coucou.vbs coucou

I-C - La forme d'un script WSHNous venons de voir un premier script : coucou.vbs

Nous avons indiqu que le suffixe .vbs du fichier dsignait un script vbscript. Ce n'est pas une obligation. Nous aurions pu mettre le script dans un fichier de suffixe .wsf sous la forme suivante plus complexe :

L'excution de ce script donne la chose suivante :

C:\>cscript //nologo coucou2.wsf coucou

Un script WSH peut mlanger les langages :

L'excution de ce script donne la chose suivante :

C:\>cscript //nologo coucou3.wsf coucou (vbscript) coucou (javascript) coucou (perlscript)

-7Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Nous retiendrons les points suivants :1 2 3 4 Le conteneur WSH n'est pas li un langage. Un script wsh peut mlanger les langages dans un fichier de suffixe .wsf Le script est alors encadr par des balises ... A l'intrieur de l'application (=job), les langages utiliss par les diffrentes portions de code sont balises par .... Ce langage de balisages porte un nom : XML pour eXtended Markup Language. XML ne dfinit aucune balise mais des rgles d'agencement de balises. Ici on devrait donc dire que le langage de balisages utilis dans un script wsh suit la norme XML.

Par la suite, nous utiliserons exclusivement vbscript dans des fichiers .vbs.

I-D - L'objet WSCRIPTLe conteneur WSH met a la disposition des scripts qu'il excute un objet appelle wscript. Un objet a des proprits et des mthodes :

Un objet Obj a des proprits Pi qui fixent son tat. Ainsi un objet thermomtre peut avoir une proprit temprature. Cette proprit est un des aspects de l'tat du thermomtre. Une autre pourrait tre la temprature maximale Tmax qu'il peut supporter.

L'objet Obj peut avoir des mthodes Mj qui permettent des agents extrieurs soit de : connatre son tat changer son tat

Ainsi notre thermomtre, s'il est lectronique, pourrait avoir une mthode allumer qui le mettrait en marche, une autre teindre qui l'teindrait, une autre afficher qui afficherait la temprature d'quilibre une fois celle-ci atteinte. En termes de programmation, une mthode est une fonction qui peut admettre des arguments et rendre des rsultats. En Vbscript, les proprits Pi d'un objet Obj sont notes Obj.Pi et les mthodes Mj sont notes Obj.Mj. L'objet wscript de WSH est un objet important pour les mthodes qu'il met a disposition des scripts. Ainsi sa mthode cho permet d'afficher un message. La syntaxe de cette mthode est la suivante : wscript.echo arg1, arg2, ..., argn Les valeurs des arguments argi sont alors affiches dans une fentre (excution par wscript) ou a l'cran (excution par cscript sous DOS).

-8Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

I-E - Le conteneur Internet ExplorerNous avons crit plus haut que Internet Explorer pouvait tre un conteneur pour un script vbscript. Montrons-le sur un exemple simple. Suit une page HTML (HyperText Markup Language) appele coucou2.htm ne contenant pas de script vbscript.

Son chargement direct par Internet Explorer (Fichier/Ouvrir) donne les rsultats suivants :

Le contenu du fichier coucou2.htm nous montre que HTML est un langage de balisage. Connatre le langage HTML c'est connatre ces balises. Celles-ci ont pour but principal d'indiquer au navigateur comment afficher un document. HTML ne suit pas exactement la norme XML mais en est proche. Dans coucou2.htm, il y a deux informations reprsenter notes 1 et 2. Nous les avons reprsentes galement dans l'affichage qui en a t fait. C'est la balise ... qui a fait que l'information 1 a t place dans la barre de titre du navigateur et la balise .. qui a fait que l'information 2 a t place dans la partie document du navigateur. Nous n'entrerons pas davantage dans l'tude du langage HTML. Modifions le fichier coucou2.htm en y introduisant un script vbscript et appelons-le maintenant coucou1.htm :

-9Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Le script vbscript a t plac dans la balise .... Il aurait pu tre plac ailleurs. Il affiche "coucou" au chargement initial de la page. Ici, le navigateur doit tre Internet Explorer car seul ce navigateur est par dfaut un conteneur pour des scripts vbscript. L'affichage obtenu est alors le suivant :

suivi de l'affichage normal de la page :

Le script excut tait le suivant :

Alors que le conteneur WSH mettait disposition du script un objet appel wscript permettant de faire des affichages avec sa mthode echo, ici IE met disposition du script un objet window permettant de faire des affichages avec la mthode alert. Ainsi pour afficher "coucou", on crit wscript.echo "coucou" dans WSH et window.alert "coucou" dans IE. On peut montrer ici aussi qu'en fait on peut utiliser plusieurs langages dans le conteneur IE. Nous reprenons l'exemple dj prsent dans WSH au sein d'une page coucou3.htm :

- 10 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Le chargement de cette page par IE affiche tout d'abord trois fentres d'information :

avant d'afficher la page finale :

I-F - L'aide de WSHWSH vient avec un systme d'aide situ habituellement dans le dossier "C:\Program Files\Microsoft Windows Script\ScriptDocs". pour la version 5.6 de WSH, le fichier d'aide s'appelle "SCRIPT56.CHM". Il suffit de double-cliquer sur ce fichier pour avoir accs l'aide. Il peut tre pratique d'en avoir un raccourci sur son bureau. Une fois lanc, on a quelque chose comme suit :

- 11 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

On y trouve l'aide du conteneur WSH mais galement celle pour les langages vbscript et javascript. C'est un outil indispensable la fois pour le dbutant et le programmeur confirme. Il y a plusieurs faons de travailler avec cette aide : on ne sait pas trop ce qu'on cherche. On veut simplement dcouvrir ce qui est propose. L'onglet Sommaire ci-dessus peut tre alors utilise. On peut par exemple regarder ce qui est propose pour vbscript :

- 12 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Vous dcouvrirez dans l'aide de VBscript de nombreuses informations qui ne sont pas dans ce document. vous pouvez chercher quelque chose de prcis, par exemple la faon d'utiliser la fonction msgbox de VBscript. Utilisez alors l'onglet Rechercher :

- 13 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

L'aide ramne toutes les rubriques qui ont un rapport avec le mot recherch. En gnral, les premires rubriques proposes sont les plus pertinentes. C'est le cas ici o la premire rubrique propose est la bonne. Il suffit de double-cliquer dessus pour avoir l'information de cette rubrique :

- 14 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

II - Les bases de la programmation VBSCRIPTApres avoir dcrit les contextes d'excution possibles pour un script vbscript, nous abordons maintenant le langage lui-mme. Dans toute la suite, nous nous plaons dans les conditions suivantes : 1 2 le conteneur du script est WSH le script est place dans un fichier de suffixe .vbs

Pour prsenter un concept, nous oprons en gnral de la faon suivante : on introduit le concept si besoin est on prsente un programme d'illustration avec ses rsultats on commente les rsultats et le programme si besoin est

Les conteneurs vbscript ne sont pas sensibles la "casse" utilise (majuscules/minuscules) dans le texte du script. Aussi pourra-t-on crire indiffremment wscript.echo "coucou" ou WSCRIPT.ECHO "coucou". Les programmes prsents dans la suite font beaucoup d'critures a l'cran aussi allons-nous prsenter de nouveau les mthodes d'criture de l'objet wscript.

II-A - Afficher des informationsNous avons dj utilis la mthode echo de l'objet wscript mais ce dernier a d'autres mthodes permettant d'crire l'cran comme le montre le script suivant :

On notera les points suivants : Toute texte place aprs une apostrophe est considre comme un commentaire du script et n'est pas interprte par WSH ( ligne 1). la mthode echo crit ses arguments et passe la ligne suivante de mme que la mthode writeLine (lignes 2 et 6) la mthode write crit ses arguments et ne passe pas a la ligne suivante (ligne 3) une marque de fin de ligne est reprsente par la suite de deux caractres de codes ASCII 13 et 10. Ainsi ligne 4 est-elle reprsente par l'expression chr(13) & chr(10) ou chr(i) est le caractre de code ASCII i et & l'oprateur de concatnation de chane. Ainsi "chat" & "eau" est la chane "chteau". la marque de fin de ligne peut tre reprsente plus facilement par la constante vbCRLF (ligne 5)

II-B - criture des instructions dans un script Vbscript

- 15 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Par dfaut, on crit une instruction par ligne. Nanmoins, on peut crire plusieurs instructions par ligne en les sparant par le caractre : comme dans inst1:inst2:inst3. Si une ligne est trop longue, on peut la dcouper en morceaux. Il faut alors que les diffrentes parties de l'instruction soient termines par les deux caractres (espace)_. Nous reprenons l'exemple prcdent en rcrivant diffremment les instructions :

II-C - crire avec la fonction msgBoxSi dans ce document, nous utilisons quasi exclusivement l'objet wscript pour crire l'cran, il existe une fonction plus sophistique pour afficher des informations dans une fentre cette fois ci. C'est la fonction msgbox qui s'utilise en gnral avec trois paramtres :

msgbox message, icnes+boutons, titre message est le texte du message afficher icnes+boutons (facultatif) est en fait un nombre qui indique le type d'icne et les boutons a placer dans la fentre du message. Ce nombre est le plus souvent la somme de deux nombres : le premier dtermine l'icne, le second les boutons titre est le texte placer dans la barre de titre de la fentre de message

Les valeurs utiliser pour prciser l'icne et les boutons de la fentre d'affichage sont les suivantes : Constante vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 vbApplicationModal vbSystemModal Valeur 0 1 2 3 4 5 16 32 48 64 0 256 512 768 0 4096 Description Affiche uniquement le bouton OK. Affiche les boutons OK et Annuler. Affiche les boutons Abandon, Ressayer et Ignorer. Affiche les boutons Oui, Non et Annuler. Affiche les boutons Oui et Non. Affiche les boutons Ressayer et Annuler. Affiche l'icne Message critique. Affiche l'icne Demande d'avertissement. Affiche l'icne Message d'avertissement. Affiche l'icne Message d'information. Le premier bouton est le bouton par dfaut. Le deuxime bouton est le bouton par dfaut. Le troisime bouton est le bouton par dfaut. Le quatrime bouton est le bouton par dfaut. Application modale ; l'utilisateur doit rpondre au message avant de continuer travailler dans l'application courante. Systme modal ; toutes les applications sont suspendues jusqu' ce que l'utilisateur rponde au message.

- 16 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Voici des exemples :

Dans certains cas, on prsente une fentre d'information qui est galement une fentre de saisie. Si on pose une question, on veut par exemple savoir si l'utilisateur a cliqu sur le bouton oui ou sur le bouton non. La fonction msgBox rend un rsultat que dans le programme prcdent nous n'avons pas utilis. Ce rsultat est un nombre entier reprsentant le bouton utilis par l'utilisateur pour fermer la fentre d'affichage : Constante vbOK vbCancel vbAbort Valeur 1 2 3 Bouton choisi OK Annuler Abandon

- 17 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

vbRetry vbIgnore vbYes vbNo

4 5 6 7

Ressayer Ignorer Oui Non

Le programme suivant montre l'utilisation du rsultat de la fonction msgBox. On prsente 4 fois une fentre avec les boutons oui, non, annuler.

On rpond de la faon suivante :1 2 3 4 on clique sur oui on clique sur non on clique sur annuler on ferme la fentre sans utiliser de bouton. Le programme montre que cela revient utiliser le bouton Annuler.

II-D - les donnes utilisables en VbscriptVBscript ne connat qu'un type de donnes : le variant. La valeur d'un variant peut tre un nombre (4, 10.2), une chane de caractres ("bonjour"), un boolen (true/false), une date (#01/01/2002#), l'adresse d'un objet, un ensemble de toutes ces donnes places dans une structure appele tableau. Examinons le programme suivant et ses rsultats :

- 18 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Commentaires : un certain nombre de langages de programmation (C, C++, Pascal, Java, C#, ...) exigent la dclaration pralable d'une variable avant son utilisation. Cette dclaration consiste indiquer le nom de la variable et le type de donnes elle peut contenir (entier, rel, chane, date, boolen, ...). La dclaration des variables permet diffrentes choses : connatre la place mmoire ncessaire la variable si diffrents types de donnes ncessitent diffrents espaces mmoire de vrifier la cohrence du programme. Ainsi si i est un entier et c une chane de caractres, multiplier i par c n' aucun sens. Si le type des variables i et c a t dclar par le programmeur, le programme charg d'analyser le programme avant son excution peut signaler une telle incohrence.

- 19 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Comme la plupart des langages de script type de donnes unique (Perl, Python, Javascript, ...) Vbscript autorise de ne pas dclarer les variables. C'est ce qui a t fait dans l'exemple ci-dessus. notons la syntaxe de diffrentes donnes 10.2 en ligne 10 (point dcimal et non virgule). On notera qu' l'affichage c'est 10,2 qui est affich. 1.4e-2 en ligne 13 (notation scientifique). A l'affichage, c'est le nombre 0,014 qui a t affich #01/10/2002# (ligne 26) pour reprsenter la date du 10 janvier 2002. C'est donc le format #mm/jj/aaaa# que vbscript utilise pour reprsenter la date jj du mois mm de l'anne aaaa les boolens true et false (vrai/faux) en lignes 31 et 34. Ces deux valeurs sont reprsentes respectivement par les entiers -1 et 0 comme le montre l'affichage des lignes 32 et 35. Lorsqu'un boolen est concatn une chane de caractres, ces valeurs deviennent respectivement les chanes "Vrai" et "Faux" comme le montrent les lignes 33 et 36. On remarquera au passage que l'oprateur & de concatnation peut servir concatner autre chose que des chanes. une variable v n'ayant pas de type assign, elle peut accueillir successivement dans le temps des valeurs de diffrents types.

II-E - les sous-types du type variantVoici ce que dit la documentation officielle sur les diffrents types de donnes que peut contenir un variant : Au-del de la simple distinction nombre/chane, un Variant peut distinguer diffrents types d'information numrique. Par exemple, certaines informations numriques reprsentent une date ou une heure. Lorsque ces informations sont utilises avec d'autres donnes de date ou d'heure, le rsultat est toujours exprim sous la forme d'une date ou d'une heure. Vous disposez aussi d'autres types d'information numrique, des valeurs boolennes jusqu'aux grands nombres virgule flottante. Ces diffrentes catgories d'information qui peuvent tre contenues dans un Variant sont des sous-types. Dans la plupart des cas, vous placez simplement vos donnes dans un Variant et celui-ci se comporte de la faon la plus approprie en fonction de ces donnes. Le tableau suivant prsente diffrents sous-types susceptibles d'tre contenus dans un Variant. Sous-type Empty Null Boolean Byte Integer Currency Long Single Description Le Variant n'est pas initialis. Sa valeur est gale zro pour les variables numriques et une chane de longueur nulle ("") pour les variables chane. Le Variant contient intentionnellement des donnes incorrectes. Contient True (vrai) ou False (faux). Contient un entier de 0 255. Contient un entier de -32 768 32 767. -922 337 203 685 477,5808 922 337 203 685 477,5807. Contient un entier de -2 147 483 648 2 147 483 647. Contient un nombre virgule flottante en prcision simple de -3,402823E38 -1,401298E-45 pour les valeurs ngatives ; de 1,401298E-45 3,402823E38 pour les valeurs positives. Contient un nombre virgule flottante en prcision double de -1,79769313486232E308 -4,94065645841247E-324 pour les valeurs ngatives ; de 4,94065645841247E-324 1,79769313486232E308 pour les valeurs positives. Contient un nombre qui reprsente une date entre le 1er janvier 100 et le 31 dcembre 9999. Contient une chane de longueur variable limite environ 2 milliards de caractres. Contient un objet. Contient un numro d'erreur.

Double

Date (Time) String Object Error

- 20 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

II-F - connatre le type exact de la donne contenue dans un variantUne variable de type variant peut contenir des donnes de divers types. Il nous faut quelquefois connatre la nature exacte de ces donnes. Si dans un programme nous crivons produit=nombre1*nombre2, nous supposons que nombre1 et nombre2 sont deux donnes numriques. Parfois nous n'en sommes pas srs car ces valeurs peuvent provenir d'une saisie au clavier, d'un fichier, d'une source extrieure quelconque. Il nous faut alors vrifier la nature des donnes places dans nombre1 et nombre2. La fonction typename(var) nous permet de connatre le type de donnes contenues dans la variable var. Voici des exemples :

Une autre fonction possible est vartype(var) qui rend un nombre reprsentant le type de la donne contenue par la variable var : Constante Valeur vbEmpty 0 vbNull 1 vbInteger 2 vbLong 3 vbSingle 4 vbDouble 5 vbCurrency 6 vbDate 7 vbString 8 vbObject 9 vbError 10 vbBoolean 11 vbVariant 12 vbDataObject13 vbByte 17 vbArray 8192 Description Empty (non initialise) Null (aucune donne valide) Entier Entier long Nombre en virgule flottante en simple prcision Nombre en virgule flottante en double prcision Montaire Date Chane Objet Automation Erreur Boolen Variant (utilis seulement avec des tableaux de Variants) Objet non Automation Octet Tableau

- 21 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Remarque Ces constantes sont spcifies par VBScript. En consquence, les noms peuvent tre utiliss n'importe o dans votre code la place des valeurs relles. Les informations ci-dessus proviennent de la documentation de VBscript. Celle-ci est parfois incorrecte, issue probablement de copier-coller faits partir de la documentation de VB. La fonction vartype de VBScript ne fait qu'une partie de ce qui est annonc ci-dessus. Le programme prcdent, rcrit pour vartype donne les rsultats suivants :

II-G - dclarer les variables utilises par le scriptNous avons indiqu qu'il n'tait pas obligatoire de dclarer les variables utilises par le script. Dans ce cas, si nous crivons : 1 somme=4 ... somme=smme+10 avec une faute de frappe smme au lieu de somme dans l'instruction 2, vbscript ne signalera aucune erreur. Il supposera que smme est une nouvelle variable. Il la crera et dans le contexte de l'instruction 2 l'utilisera en l'initialisant 0. Ce genre d'erreurs peut tre trs difficile retrouver. Aussi est-il conseill de forcer la dclaration des variables avec la directive option explicit place en dbut de script. Ensuite toute variable doit tre dclare avec une instruction dim avant sa premire utilisation : option explicit

2

- 22 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

... dim somme 1 somme=4 ... somme=smme+10 Dans cet exemple, vbscript indiquera qu'il y a une variable non dclare smme en 2) comme le montre l'exemple qui suit :

2

Si dans les courts exemples du document, les variables ne sont la plupart du temps pas dclares, nous forcerons leur dclaration ds que nous crirons les premiers scripts significatifs. La directive Option explicit sera alors utilise systmatiquement.

II-H - les fonctions de conversionVbscript transforme les donnes des variants en chanes, nombres, boolens, ... selon le contexte. La plupart du temps, cela fonctionne bien mais parfois cela donne quelques surprises comme nous le verrons ultrieurement. On peut alors vouloir "forcer" le type de donne du variant. VBscript possde des fonctions de conversion qui transforment une expression en divers types de donnes. En voici quelques unes : Fonction Cint (expression) Clng (expression) Cdbl (expression) Csng (expression) Ccur (expression) Commentaire transforme expression en entier court (integer) transforme expression en entier long (long) transforme expression en rel double (double) transforme expression en rel simple (single) transforme expression en donne montaire (currency)

Voici quelques exemples :

- 23 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

- 24 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

II-I - lire des donnes tapes au clavierL'objet wscript permet un script de rcuprer des donnes tapes au clavier. La mthode wscript.stdin.readLine permet de lire une ligne de texte tape au clavier et valide par la touche "Entre". Cette ligne lue peut tre affecte une variable.

Commentaires : Dans la colonne des rsultats et dans la ligne [Tapez votre nom : st] , st est la ligne tape par l'utilisateur.

Si le texte tap au clavier reprsente un nombre, il est quand mme considr avant tout comme une chane de caractres comme le montre l'exemple ci-dessous :

Si ce nombre intervient dans une opration arithmtique, VBscript fera automatiquement la conversion de la chane vers un nombre mais pas toujours. Regardons l'exemple qui suit :

Dans les rsultats, on voit que la ligne 8 du script ne s'est pas droule comme attendu, ceci parce que (malheureusement) en vbscript l'oprateur + a deux significations : addition de deux nombres ou concatnation de- 25 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

deux chanes (les deux chanes sont colles l'une l'autre). Nous avons vu prcdemment que les nombres taps au clavier taient lus comme tant des chanes de caractres et que vbscript transformait celles-ci en nombres selon les besoins. Il l'a correctement fait pour les oprations -,*,/ qui ne peuvent faire intervenir que des nombres mais pas pour l'oprateur + qui lui peut galement faire intervenir des chanes. Il a suppos ici qu'on voulait faire une concatnation de chanes. Une solution simple ce problme est de transformer en nombres les chanes ds leur lecture comme le montre l'amlioration qui suit du programme prcdent :

II-J - saisir des donnes avec la fonction inputboxOn peut vouloir saisir des donnes dans une interface graphique plutt qu'au clavier. On utilise alors la fonction inputBox. Celle-ci admet de nombreux paramtres dont seuls les deux premiers sont frquemment utilises :

reponse=inputBox(message,titre) message : la question que vous posez a l'utilisateur titre (facultatif) : le titre que vous donnez a la fentre de saisie rponse : le texte tape par l'utilisateur. Si celui-ci a ferme la fentre sans rpondre, rponse est la chane vide.

Voici un exemple o on demande le nom et l'age d'une personne. Pour le nom on donne une information et on fait OK. Pour l'age, on donne galement une information mais on fait Annuler.

- 26 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

II-K - utiliser des objets structursIl est possible de crer avec vbscript des objets ayant des mthodes et des proprits. Pour ne pas compliquer les choses, nous allons prsenter ici un objet avec des proprits et pas de mthodes. Considrons une personne. Elle a de nombreuses proprits qui la caractrisent : taille, poids, couleur de peau, des yeux, des cheveux, ... Nous n'en retiendrons que deux : son nom et son ge. Avant de pouvoir utiliser des objets, il faut crer le moule qui va permettre de les fabriquer. Cela se fait en vbscript avec une classe. La classe personne pourrait tre dfinie comme suit :

class personne Dim nom,age End class

C'est l'instruction [Dim nom,age] qui dfinit les deux proprits de la classe personne. Pour crer des exemplaires (on parle d'instances) de la classe personne, on crit :

- 27 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

set personne1=new personne set personne2=new personne

Pourquoi ne pas crire

personne1=new personne personne2=new personne

Parce qu'un variant ne peut contenir un objet. Il peut seulement en contenir l'adresse. En crivant set personne1=new personne, la squence d'vnements suivante prend place : 1 2 un objet personne est cr. Cela veut dire que de la mmoire lui est alloue. l'adresse de cet objet personne est affecte la variable personne1

Nous avons alors le schma mmoire suivant pour les variables personne1 et personne2 :

Par abus de langage, on pourra dire que personne1 est un objet personne. On peut accepter cet abus de langage si on se rappelle que personne1 est en fait l'adresse d'un objet personne et non l'objet personne lui-mme. Nous avons dit qu'un objet personne avait deux proprits nom et age. Comment exploiter ces proprits ? Par la notation objet.proprit comme il a t expliqu un peu plus haut. Ainsi personne1.nom dsigne le nom de la personne 1 et personne1.age son ge. Voici un court programme d'illustration :

Le programme prcdent pourrait tre modifi comme suit :

- 28 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Nous avons utilis ici la structure with ... end with qui permet de "factoriser" des noms d'objets dans des expressions. La structure with p1 ... end with des lignes 9-12 et 15-18 permet d'utiliser ensuite la syntaxe .nom en lieu et place de p1.nom et .age en lieu et place de p1.age. Cela permet d'allger l'criture des instructions o le mme nom d'objet est utilis de faon rpte.

II-L - affecter une valeur une variableIl y a deux instructions pour affecter une valeur une variable : 1 2 variable=expression set variable=expression

La forme 2 est rserve aux expressions dont le rsultat est une rfrence d'objet. Pour tous les autres types d'expressions c'est la forme 1 qui convient. La diffrence entre les deux formes est la suivante : 1 dans l'instruction variable=expression, variable reoit une valeur. Si v1 et v2 sont deux variables, crire v1=v2 affecte la valeur de v1 v2. On a donc la duplication d'une valeur deux endroits diffrents. Si par la suite, la valeur de v2 est modifie, celle de v1 ne l'est en rien.

2

dans l'instruction set variable=expression, variable reoit comme valeur l'adresse d'un objet. Si v1 et v2 sont deux variables et si v2 est l'adresse d'un objet obj2, crire set v1=v2 affecte la valeur de v1 v2, donc l'adresse de l'objet obj2. Lorsque le script manipule ensuite v1 et v2, ce ne sont pas les "valeurs" de v1 et v2 qui sont manipules mais bien les objets "points" par v1 et v2, donc le mme objet ici. On dit que v1 et v2 sont deux rfrences au mme objet et manipuler ce dernier via v1 ou v2 ne fait aucune diffrence. Dit autrement, modifier l'objet rfrenc par v2 modifie celui rfrenc par v1.

- 29 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Voici un exemple :

- 30 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

II-M - valuer des expressionsLes principaux oprateurs permettant d'valuer des expressions sont les suivantes : Type d'oprateurs Oprateurs Exemple Arithmtique +,-,*,/ mod a mod b donne le reste de la division entire de a par b. Auparavant a et b ont t transforms en entiers si besoin tait. \ a \ b donne le quotient de la division entire de a par b. Auparavant a et b ont t transforms en entiers si besoin tait. ^ a^b lve a la puissance b. Ainsi a^2 est gal a2 Comparaison = =, a=b est vrai si a est gal b

Logique

Concatnation

a et b peuvent tre tous deux des nombres ou tous deux des chanes de caractres. Dans ce dernier cas, chaine1if ERRORLEVEL 5 echo 5 2. C:\>if ERRORLEVEL 4 echo 4 4 3. C: >if ERRORLEVEL 3 echo 3 3

La commande DOS 1 teste si le code d'erreur retourn par le programme est >=5. Si oui, elle affiche (echo) 5 sinon rien. La commande DOS 2 teste si le code d'erreur retourn par le programme est >=4. Si oui, elle affiche 4 sinon rien. La commande DOS 3 teste si le code d'erreur retourn par le programme est >=3. Si oui, elle affiche 3 sinon rien. Des rsultats affichs, on peut dduire que le code d'erreur retourn par le programme tait 4.

II-O - les tableaux de donnes dans un variantUn variant T peut contenir une liste de valeurs. On dit alors que c'est un tableau. Un tableau T possde diverses proprits : on a accs a l'lment i du tableau T par la syntaxe T(i) ou i est un entier appel indice entre 0 et n-1 si T a n lments. on peut connatre l'indice du dernier lment du tableau T avec l'expression ubound(T). Le nombre d'lments du tableau T est alors ubound(T)+1. On appelle souvent ce nombre la taille du tableau.

- 35 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

un variant T peut tre initialise avec un tableau vide par la syntaxe T=array() ou avec une suite d'lments par la syntaxe T=array(element0, element1, ...., elementn) on peut ajouter des lments a un tableau T dj cr. Pour cela, on utilise l'instruction redim preserve T(N) ou N est le nouvel indice du dernier lment du tableau T. L'opration est appele un redimensionnent (redim). Le mot cl preserve indique que lors de ce redimensionnent, le contenu actuel du tableau doit tre prserv. En l'absence de ce mot cl, T est redimensionne et vid de ses lments. un lment T(i) du tableau T est de type variant et peut donc contenir n'importe quelle valeur et en particulier un tableau. Dans ce cas, la notation T(i)(j) dsigne l'lment j du tableau T(i).

Ces diverses proprits des tableaux sont illustres par le programme qui suit :

Commentaires on a utilise ici une fonction appele join explicite un peu plus loin.

II-P - les variables tableauxIl existe en vbscript une autre faon d'utiliser un tableau, c'est d'utiliser une variable tableau. Une telle variable doit alors tre obligatoirement dclare contrairement aux variables scalaires par une instruction dim. Diverses dclarations sont possibles :

- 36 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

dim tableau(n) dclare un tableau statique de n+1 lments numrotes de 0 a n. Ce type de tableau ne peut pas tre redimensionne dim tableau() dclare un tableau dynamique vide. Il devra tre redimensionne pour tre utilise par l'instruction redim de la mme manire que pour un variant contenant un tableau dim tableau(n,m) dclare un tableau 2 dimensions de (n+1)*(m+1) lments. L'lment (i,j) du tableau est not tableau(i,j). On notera la diffrence avec un variant o le mme lment aurait t not tableau(i)(j).

Pourquoi deux types de tableaux qui finalement sont trs proches ? La documentation de vbscript n'en parle pas et n'indique pas non plus si l'un est plus performant que l'autre. Par la suite, nous utiliserons quasi exclusivement le tableau dans un variant dans nos exemples. On se rappellera cependant que VBscript drive du langage Visual Basic qui contient lui des donnes types (integer, double, boolean, ...). Dans ce cas, si on doit utiliser un tableau de nombres rels par exemple, la variable tableau sera plus performante que la variable variant. On dclarera alors quelque chose comme dim tableau(1000) as double pour dclarer un tableau de nombres rels ou simplement dim tableau() as double si le tableau est dynamique. Voici un exemple illustrant l'utilisation de variables tableau :

- 37 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

II-Q - les fonctions split et joinLes fonctions split et join permettent de passer d'une chane de caractres un tableau et vice versa : Si T est un tableau et car une chane de caractres, join(T,car) est une chane de caractres forme par la runion de tous les lments du tableau T, chacun tant spare du suivant par la chane car. Ainsi join(array(1,2,3),"abcd") donnera la chane "1abcd2abcd3" Si C est une chane de caractres forme d'une suite de champs spars par la chane car la fonction split(C,car) est un tableau dont les lments sont les diffrents de la chane C. Ainsi split("1abcd2abcd3","abcd") donnera le tableau (1,2,3)

Voici un exemple :

- 38 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Programme' transformation tableau-->chane et viceversa ' tableau --> chaine tableau=array("un",2,"trois") chaine=join(tableau,",") wscript.echo chaine ' chaine --> tableau tableau2=split(chaine,",") For i=0 To ubound(tableau2) wscript.echo tableau(i) Next

Rsultatsun,2,trois un 2 trois

II-R - Les dictionnairesOn a accs l'lment d'un tableau T lorsqu'on connat son numro i. Il est alors accessible par la notation T(i). Il existe des tableaux dont on accde aux lments, non pas par un numro mais par une chane de caractres. L'exemple typique de ce type de tableau est le dictionnaire. Lorsqu'on cherche la signification d'un mot dans le "Larousse" ou "Le petit Robert", on accde celle-ci par le mot. On pourrait reprsenter ce dictionnaire par un tableau 2 colonnes : mot1 mot2 mot3 .... On pourrait alors crire des choses comme : dictionnaire("mot1")="description1" dictionnaire("mot2")="description2" ... On est alors proche du fonctionnement d'un tableau si ce n'est que les indices du tableau ne sont pas des nombres entiers mais des chanes de caractres. On appelle ce type de tableau un dictionnaire (ou tableau associatif, hashtable) et les indices chanes de caractres les cls du dictionnaire (keys). L'usage des dictionnaires est extrmement frquent dans le monde informatique. Nous avons tous une carte de scurit sociale avec dessus un numro. Ce numro nous identifie de faon unique et donne accs aux informations qui nous concernent. Dans le modle dictionnaire("cl")="informations", "cl" serait ici le n de scurit sociale et "informations" toutes les informations stockes notre sujet sur les ordinateurs de la scurit sociale. Sous Windows, on dispose d'un objet Active X appel "Scripting.Dictionary" qui permet de crer et grer des dictionnaires. Un objet Active X est un composant logiciel qui expose une interface utilisable par des programmes qui peuvent tre crits en diffrents langages, tant qu'ils respectent la norme d'utilisation des objets Active X. L'objet Scripting.dictionary est donc utilisable par les langages de programmation de Windows : javascript, per, python, C, C++, vb, vba,... et pas seulement par vbscript. 1 Un objet Scripting.Dictionary est cr par une instruction set dico=wscript.CreateObject("Scripting.Dictionary") ou simplement description1 description2 description3

- 39 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

set dico=CreateObject("Scripting.Dictionary") CreateObject est une mthode de l'objet WScript permettant de crer des instances d'objets Active X. La version 2 montre que wscript peu tre un objet implicite. Lorsqu'une mthode ne peut tre "rapproche" d'un objet, le conteneur WSH essaiera de le rapprocher de l'objet wscript. 2 Une fois le dictionnaire cr, on va pouvoir lui ajouter des lments avec la mthode add : dico.add "cl",valeur va crer une nouvelle entre dans le dictionnaire associe la cl "cl". La valeur associe est un variant dont une donne quelconque. Pour rcuprer la valeur associe une cl donne on utilise la mthode item du dictionnaire : var=dico.item("cl") ou set var=dico.item("cl) si la valeur associe la cl est un objet. L'ensemble des cls du dictionnaire peut tre rcupr dans un tableau variant grce la mthode keys : cls=dico.keys cls est un tableau dont on peut parcourir les lments. L'ensemble des valeurs du dictionnaire peut tre rcupr dans un tableau variant grce la mthode items : valeurs=dico.items items est un tableau dont on peut parcourir les lments L'existence d'une cl peut tre teste avec la mthode exists : dico.exists("cl") est vrai si la cl "cl" existe dans le dictionnaire On peut enlever une entre du dictionnaire (cl+valeur) avec la mthode remove : dico.remove("cl") enlve l'entre du dictionnaire associe la cl "cl". dico.removeall enlve toutes les cls, c.a.d. vide le dictionnaire. Le programme suivant utilise ces diverses possibilits : Programme' cration et utilisation d'un dictionnaire Set dico=CreateObject("Scripting.Dictionary") ' remplisage dico dico.add "cl1","valeur1" dico.add "cl2","valeur2" dico.add "cl3","valeur3" ' nombre d'lments wscript.echo "Le dictionnaire a " & dico.count & " lments" ' liste des cls wscript.echo "liste des cls" cles=dico.keys - 40 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

3

4

5

6

7

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

ProgrammeFor i=0 To ubound(cles) wscript.echo cles(i) Next ' liste des valeurs wscript.echo "liste des valeurs" valeurs=dico.items For i=0 To ubound(valeurs) wscript.echo valeurs(i) Next ' liste des cls et valeurs wscript.echo "liste des cls et valeurs" cles=dico.keys For i=0 To ubound(cles) wscript.echo "dico(" & cles(i) & ")=" & dico.item(cles(i)) Next ' recherche d'lments ' cl1 If dico.exists("cl1") Then wscript.echo "La cl cl1 existe dans le dictionnaire et la valeur associe est " & dico.item("cl1") Else wscript.echo "La cl cl1 n'existe pas dans le dictionnaire" End If ' cl4 If dico.exists("cl4") Then wscript.echo "La cl cl4 existe dans le dictionnaire et la valeur associe est " & dico.item("cl4") Else wscript.echo "La cl cl4 n'existe pas dans le dictionnaire" End If ' on enlve la cl 1 dico.remove("cl1") ' liste des cls et valeurs wscript.echo "liste des cls et valeurs aprs suppression de cl1" cles=dico.keys For i=0 To ubound(cles) wscript.echo "dico(" & cles(i) & ")=" & dico.item(cles(i)) Next ' on supprime tout dico.removeall ' liste des cls et valeurs wscript.echo "liste des cls et valeurs aprs suppression de tous les lments" cles=dico.keys For i=0 To ubound(cles) wscript.echo "dico(" & cles(i) & ")=" & dico.item(cles(i)) Next ' fin wscript.quit 0

RsultatsLe dictionnaire a 3 lments liste des cls cl1 cl2 cl3 liste des valeurs valeur1 valeur2 valeur3 liste des cls et valeurs dico(cl1)=valeur1 dico(cl2)=valeur2 dico(cl3)=valeur3

- 41 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

RsultatsLa cl cl1 existe dans le dictionnaire et la valeur associe est valeur1 La cl cl4 n'existe pas dans le dictionnaire liste des cls et valeurs aprs suppression de cl1 dico(cl2)=valeur2 dico(cl3)=valeur3 liste des cls et valeurs aprs suppression de tous les lments

II-S - Trier un tableau ou un dictionnaireIl est courant de vouloir trier un tableau ou un dictionnaire dans l'ordre croissant ou dcroissant de ses valeurs ou de ses cls pour un dictionnaire. Alors que dans la plupart des langages, existent des fonctions de tri, il ne semble pas en exister en vbscript. C'est une lacune.

II-T - Les arguments d'un programmeIl est possible d'appeler un programme vbscript en lui passant des paramtres comme dans : cscript prog1.vbs arg1 arg2 .... argn Cela permet l'utilisateur de passer des informations au programme. Comment celui-ci fait-il pour les rcuprer ? Regardons le programme suivant :

Commentaires WScript.Arguments est la collection des arguments passes au script une collection C est un objet qui a une proprit count qui est le nombre d'lments dans la collection une mthode C(i) qui donne l'lment i de la collection

II-U - Une premire application : IMPOTSOn se propose d'crire un programme permettant de calculer l'impt d'un contribuable. On se place dans le cas simplifi d'un contribuable n'ayant que son seul salaire dclarer : on calcule le nombre de parts du salari nbParts=nbEnfants/2 +1 s'il n'est pas mari, nbEnfants/2+2 s'il est mari, o nbEnfants est son nombre d'enfants. on calcule son revenu imposable R=0.72*S o S est son salaire annuel

- 42 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

on calcule son coefficient familial Q=R/N on calcule son impt I d'aprs les donnes suivantes

12620.0 0 0 13190 0.05 631 15640 0.1 1290.5 24740 0.15 2072.5 31810 0.2 3309.5 39970 0.25 4900 48360 0.3 6898.5 55790 0.35 9316.5 92970 0.4 12106 127860 0.45 16754.5 151250 0.50 23147.5 172040 0.55 30710 195000 0.60 39312 0 0.65 49062 Chaque ligne a 3 champs. Pour calculer l'impt I, on recherche la premire ligne o QFcscript impots1.vbs o 2 200000 impt=22504 C:\>cscript impots1.vbs o 2 20000 impt=0 C:\>cscript impots1.vbs o 2 2000000 impt=746064 C:\>cscript impots1.vbs n 2 200000 impt=33388 C:\>cscript impots1.vbs n 3 200000 impt=22504 C:\>cscript impots1.vbs Syntaxe : pg mari enfants salaire mari : caractre O si mari, N si non mari enfants : nombre d'enfants salaire : salaire annuel sans les centimes

Commentaires : le programme utilise ce qui a t expose prcdemment (dclaration des variables, arguments, changements de types, tests, boucles, tableau dans un variant) il ne vrifie pas la validit des donnes, ce qui serait anormal dans un programme rel seule la boucle while prsente une difficult. Elle cherche a dterminer l'indice i du tableau limites pour lequel on a limites(i)>qf et cela pour i0 : Programme' lecture d'une donne jusqu' ce que celle-ci soit reconnue comme un nombre entier >0 Option Explicit Dim fini, nombre ' on boucle tant que la donne saisie n'est pas correcte ' la boucle est contrle par un boolen fini, mis faux au dpart (= ce n'est pas fini) fini=false Do While Not fini ' on demande le nombre wscript.stdout.write "Tapez un nombre entier >0: " ' on le lit nombre=wscript.stdin.readLine ' on teste le type rel de la donne lue If isNumeric(nombre) Then ' est-ce un entier (nombre gal sa partie entire) positif ? If (nombre-int(nombre))=0 And nombre>0 Then fini=true End If End If ' msg d'erreur ventuel If Not fini Then wscript.echo "Erreur, vous n'avez pas tap un nombre entier >0. Recommencez svp..." Loop ' confirmation wscript.echo "Merci pour le nombre entier >0 : " & nombre ' et fin wscript.quit 0

- 47 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

RsultatsTapez un nombre entier >0: a Erreur, vous n'avez pas tap un nombre entier >0. Recommencez svp... Tapez un nombre entier >0: -1 Erreur, vous n'avez pas tap un nombre entier >0. Recommencez svp... Tapez un nombre entier >0: 10.6 Erreur, vous n'avez pas tap un nombre entier >0. Recommencez svp... Tapez un nombre entier >0: 12 Merci pour le nombre entier >0 : 12

Commentaires : int(nombre) donne la partie entire d'un nombre. Un nombre gal sa partie entire est un entier. On notera, de faon intressante, qu'il a fallu employer le test If (nombre-int(nombre))=0 And nombre>0 parce que le test If nombre=int(nombre) And nombre>0 ne donnait pas les rsultats escomptes. Il ne dtectait pas les nombres entiers positifs. Nous laissons au lecteur le soin de dcouvrir pourquoi. Le test If (nombre-int(nombre))=0 n'est pas totalement fiable. Regardons l'exemple d'excution suivant : Tapez un nombre entier >0: 4,0000000000000000000000001 Merci pour le nombre entier >0 : 4,0000000000000000000000001 Les nombres rels ne sont pas reprsents de faon exacte mais de faon approche. Et ici, l'opration nombre-int(nombre) a donn 0 la prcision prs de l'ordinateur.

III-B - Les expressions rguliresLes expressions rgulires nous permettent de tester le format d'une chane de caractres. Ainsi on peut vrifier qu'une chane reprsentant une date est au format jj/mm/aa. On utilise pour cela un modle et on compare la chane ce modle. Ainsi dans cet exemple, j m et a doivent tre des chiffres. Le modle d'un format de date valide est alors "\d\d/\d\d/\d\d" o le symbole \d dsigne un chiffre. Les symboles utilisables dans un modle sont les suivants (documentation Microsoft) : Caractre \ Description Marque le caractre suivant comme caractre spcial ou littral. Par exemple, "n" correspond au caractre "n". "\n" correspond un caractre de nouvelle ligne. La squence "\\" correspond "\", tandis que "\(" correspond "(". Correspond au dbut de la saisie. Correspond la fin de la saisie. Correspond au caractre prcdent zro fois ou plusieurs fois. Ainsi, "zo*" correspond "z" ou "zoo". Correspond au caractre prcdent une ou plusieurs fois. Ainsi, "zo+" correspond "zoo", mais pas "z". Correspond au caractre prcdent zro ou une fois. Par exemple, "a?ve?" correspond "ve" dans "lever". Correspond tout caractre unique, sauf le caractre de nouvelle ligne. Recherche le modle et mmorise la correspondance. La sous-chane correspondante peut tre extraite de la collection Matches obtenue, l'aide d'Item [0]...[n]. Pour trouver des correspondances avec des caractres entre parenthses ( ), utilisez "\(" ou "\)". Correspond soit x soit y. Par exemple, "z|foot" correspond "z" ou "foot". "(z|f)oo" correspond "zoo" ou "foo".

^ $ * + ? . (modle)

x|y

- 48 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

{n}

{n,}

{n,m}

[xyz] [^xyz] [a-z]

[^m-z]

\b

\B \d \D \f \n \r \s \S \t \v \w

\num

\n

\xn

n est un nombre entier non ngatif. Correspond exactement n fois le caractre. Par exemple, "o{2}" ne correspond pas "o" dans "Bob," mais aux deux premiers "o" dans "fooooot". n est un entier non ngatif. Correspond au moins n fois le caractre. Par exemple, "o{2,}" ne correspond pas "o" dans "Bob", mais tous les "o" dans "fooooot". "o{1,}" quivaut "o+" et "o{0,}" quivaut "o*". m et n sont des entiers non ngatifs. Correspond au moins n et au plus m fois le caractre. Par exemple, "o{1,3}" correspond aux trois premiers "o" dans "foooooot" et "o{0,1}" quivaut "o?". Jeu de caractres. Correspond l'un des caractres indiqus. Par exemple, "[abc]" correspond "a" dans "plat". Jeu de caractres ngatif. Correspond tout caractre non indiqu. Par exemple, "[^abc]" correspond "p" dans "plat". Plage de caractres. Correspond tout caractre dans la srie spcifie. Par exemple, "[a-z]" correspond tout caractre alphabtique minuscule compris entre "a" et "z". Plage de caractres ngative. Correspond tout caractre ne se trouvant pas dans la srie spcifie. Par exemple, "[^m-z]" correspond tout caractre ne se trouvant pas entre "m" et "z". Correspond une limite reprsentant un mot, autrement dit, la position entre un mot et un espace. Par exemple, "er\b" correspond "er" dans "lever", mais pas "er" dans "verbe". Correspond une limite ne reprsentant pas un mot. "en*t\B" correspond "ent" dans "bien entendu". Correspond un caractre reprsentant un chiffre. quivaut [0-9]. Correspond un caractre ne reprsentant pas un chiffre. quivaut [^0-9]. Correspond un caractre de saut de page. Correspond un caractre de nouvelle ligne. Correspond un caractre de retour chariot. Correspond tout espace blanc, y compris l'espace, la tabulation, le saut de page, etc. quivaut "[ \f\n\r\t\v]". Correspond tout caractre d'espace non blanc. quivaut "[^ \f\n\r\t\v]". Correspond un caractre de tabulation. Correspond un caractre de tabulation verticale. Correspond tout caractre reprsentant un mot et incluant un trait de soulignement. quivaut "[A-Za-z0-9 pond tout caractre ne reprsentant pas un mot. quivaut "[^A-Za-z0-9_]". Correspond num, o num est un entier positif. Fait rfrence aux correspondances mmorises. Par exemple, "(.)\1" correspond deux caractres identiques conscutifs. Correspond n, o n est une valeur d'chappement octale. Les valeurs d'chappement octales doivent comprendre 1, 2 ou 3 chiffres. Par exemple, "\11" et "\011" correspondent tous les deux un caractre de tabulation. "\0011" quivaut "\001" & "1". Les valeurs d'chappement octales ne doivent pas excder 256. Si c'tait le cas, seuls les deux premiers chiffres seraient pris en compte dans l'expression. Permet d'utiliser les codes ASCII dans des expressions rgulires. Correspond n, o n est une valeur d'chappement hexadcimale. Les valeurs d'chappement hexadcimales doivent comprendre deux chiffres obligatoirement. Par exemple, "\x41" correspond "A". "\x041" quivaut "\x04" & "1". Permet d'utiliser les codes ASCII dans des expressions rgulires.

- 49 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Un lment dans un modle peut tre prsent en 1 ou plusieurs exemplaires. Considrons quelques exemples autour du symbole \d qui reprsente 1 chiffre : modle \d \d? \d* \d+ \d{2} \d{3,} \d{5,7} signification un chiffre 0 ou 1 chiffre 0 ou davantage de chiffres 1 ou davantage de chiffres 2 chiffres au moins 3 chiffres entre 5 et 7 chiffres

Imaginons maintenant le modle capable de dcrire le format attendu pour une chane de caractres : chane recherche une date au format jj/mm/aa une heure au format hh:mm:ss un nombre entier non sign une suite d'espaces ventuellement vide un nombre entier non sign qui peut tre prcd ou suivi d'espaces un nombre entier qui peut tre sign et prcd ou suivi d'espaces un nombre rel non sign qui peut tre prcd ou suivi d'espaces un nombre rel qui peut tre sign et prcd ou suivi d'espaces une chane contenant le mot juste modle \d{2}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} \d+ \s* \s*\d+\s* \s*[+|-]?\s*\d+\s* \s*\d+(.\d*)?\s* \s*[+|]?\s*\d+(.\d*)?\s* \bjuste\b

On peut prciser o on recherche le modle dans la chane : modle ^modle modle$ ^modle$ modle signification le modle commence la chane le modle finit la chane le modle commence et finit la chane le modle est cherch partout dans la chane en commenant par le dbut de celle-ci. modle !$ \.$ ^// ^\s*\w+\s*$ ^\s*\w+\s*\w+\s*$

chane recherche une chane se terminant par un point d'exclamation une chane se terminant par un point une chane commenant par la squence // une chane ne comportant qu'un mot ventuellement suivi ou prcd d'espaces une chane ne comportant deux mot ventuellement suivis ou prcds d'espaces une chane contenant le mot secret

\bsecret\b

- 50 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Les sous-ensembles d'un modle peuvent tre "rcuprs". Ainsi non seulement, on peut vrifier qu'une chane correspond un modle particulier mais on peut rcuprer dans cette chane les lments correspondant aux sous-ensembles du modle qui ont t entours de parenthses. Ainsi si on analyse une chane contenant une date jj/mm/aa et si on veut de plus rcuprer les lments jj, mm, aa de cette date on utilisera le modle (\d\d)/(\d\d)/(\d\d). Voyons sur cet exemple, comment on opre avec vbscript. 1 il nous faut tout d'abord crer un objet RegExp (Regular Expression) set modele=new regexp ensuite on fixe le modle tester modele.pattern="(\d\d)/(\d\d)/(\d\d)" on peut vouloir ne pas faire de diffrence entre majuscules et minuscules (par dfaut elle est faite). Ici a n'a aucune importance. modele.IgnoreCase=true on peut vouloir rechercher le modle plusieurs fois dans la chane (par dfaut ce n'est pas fait) modele.Global=true Une recherche globale n'a de sens que si le modle utilis ne fait pas rfrence au dbut ou la fin de la chane. on recherche alors toutes les correspondences du modle dans la chane : set correspondances=modele.execute(chaine) La mthode execute d'un objet RegExp rend une collection d'objets de type match. Cet objet a une proprit value qui est l'lment de chaine correspondant au modle. Si on a crit modele.global=true, on peut avoir plusieurs correspondances. C'est pourquoi le rsultat de la mthode execute est une collection de correspondances. le nombre de correspondances est donn par correspondances.count. Si ce nombre vaut 0, c'est que le modle n'a t trouv nulle part. La valeur de la correspondance n i est donne par correspondances(i).value. Si le modle contient des sous-modles entre parenthses, alors l'lments de correspondances(i) correspondant la parenthse j d modle est correspondances(i).submatches(j).

2

3

4

5

6

Tout ceci est montr dans l'exemple qui suit : Programme' expression rgulire ' on veut vrifier qu'une chane contient une date au format jj/mm/aa Option Explicit Dim modele ' on dfinit le modle Set modele=new regexp modele.pattern="\b(\d\d)/(\d\d)/(\d\d)\b" ' une date n'importe o dans la chane modele.global=true ' on recherchera le modle plusieurs fois dans la chane ' c'est l'utilisateur qui donne la chane dans laquelle on cherchera le modle Dim chaine, correspondances, i chaine="" ' on boucle tant que chaine"fin"

- 51 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

ProgrammeDo While true ' on demande l'utilisateur de taper un texte wscript.stdout.writeLine "Tapez un texte contenant des dates au format jj/mm/aa et fin pour arrter : " chaine=wscript.stdin.readLine ' fini si chaine=fin If chaine="fin" Then Exit Do ' on compare la chane lue au modle de la date Set correspondances=modele.execute(chaine) ' a-t-on trouv une correspondance If correspondances.count0 Then ' on a au moins une correspondance For i=0 To correspondances.count-1 ' on affiche la correspondance i wscript.echo "J'ai trouv la date " & correspondances(i).value ' on rcupre les sous-lments de la correspondance i wscript.echo "Les lments de la date " & i & " sont (" & correspondances(i).submatches(0) & "," _ & correspondances(i).submatches(1) & "," & correspondances(i).submatches(2) & ")" Next Else ' pas de correspondance wscript.echo "Je n'ai pas trouv de date au format jj/mm/aa dans votre texte" End If Loop ' fini wscript.quit 0

RsultatsTapez un texte contenant des dates au format jj/mm/aa et fin pour aujourd'hui on est le 01/01/01 et demain sera le 02/01/02 J'ai trouv la date 01/01/01 Les lments de la date 0 sont (01,01,01) J'ai trouv la date 02/01/02 Les lments de la date 1 sont (02,01,02) Tapez un texte contenant des dates au format jj/mm/aa et fin pour une date au format incorrect : 01/01/2002 Je n'ai pas trouv de date au format jj/mm/aa dans votre texte Tapez un texte contenant des dates au format jj/mm/aa et fin pour une suite de dates : 10/10/10, 11/11/11, 12/12/12 J'ai trouv la date 10/10/10 Les lments de la date 0 sont (10,10,10) J'ai trouv la date 11/11/11 Les lments de la date 1 sont (11,11,11) J'ai trouv la date 12/12/12 Les lments de la date 2 sont (12,12,12) Tapez un texte contenant des dates au format jj/mm/aa et fin pour fin arrter :

arrter :

arrter :

arrter :

Avec les expressions rgulires, le programme testant qu'une saisie clavier est bien un nombre entier positif pourrait s'crire comme suit : Programme' lecture d'une donne jusqu' ce que celle-ci soit reconnue comme un nombre Option Explicit Dim fini, nombre ' on dfinit le modle d'un nombre entier positif (mais qui peut tre nul) Dim modele Set modele=new regexp modele.pattern="^\s*\d+\s*$"

- 52 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Programme' on boucle tant que la donne saisie n'est pas correcte ' la boucle est contrle par un boolen fini, mis faux au dpart (= ce n'est pas fini) fini=false Do While Not fini ' on demande le nombre wscript.stdout.write "Tapez un nombre entier >0: " ' on le lit nombre=wscript.stdin.readLine ' on teste le format de la donne lue Dim correspondances Set correspondances=modele.execute(nombre) ' le modle a-t-il t vrifi ? If correspondances.count0 Then ' c'est un entier mais est-il >0 ? nombre=cint(nombre) If nombre>0 Then fini=true End If End If ' msg d'erreur ventuel If Not fini Then wscript.echo "Erreur, vous n'avez pas tap un nombre entier >0. Recommencez svp..." Loop ' confirmation wscript.echo "Merci pour le nombre entier >0 : " & nombre ' et fin wscript.quit 0

ResultatsTapez un nombre entier >0: 10.3 Erreur, vous n'avez pas tap un nombre Tapez un nombre entier >0: abcd Erreur, vous n'avez pas tap un nombre Tapez un nombre entier >0: -4 Erreur, vous n'avez pas tap un nombre Tapez un nombre entier >0: 0 Erreur, vous n'avez pas tap un nombre Tapez un nombre entier >0: 1 Merci pour le nombre entier >0 : 1 entier >0. Recommencez svp... entier >0. Recommencez svp... entier >0. Recommencez svp... entier >0. Recommencez svp...

Trouver l'expression rgulire qui nous permet de vrifier qu'une chane correspond bien un certain modle est parfois un vritable dfi. Le programme suivant permet de s'entraner. Il demande un modle et une chane et indique alors si la chane correspond ou non au modle. Programme' expression rgulire ' on veut vrifier qu'une chane correspond un modle Option Explicit ' on dfinit le modle Dim modele Set modele=new regexp modele.global=true ' on recherchera le modle plusieurs fois dans la chane ' c'est l'utilisateur qui donne la chane dans laquelle on cherchera le modle Dim chaine, correspondances, i Do While true ' on demande l'utilisateur de taper un modle wscript.stdout.write "Tapez le modle tester et fin pour arrter : " modele.pattern=wscript.stdin.readLine

- 53 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

Programme' fini ? If modele.pattern="fin" Then Exit Do ' on demande l'utilisateur les chanes comparer au modle Do While true ' on demande l'utilisateur de taper un modle wscript.stdout.writeLine "Tapez la chane tester avec le modle [" & modele.pattern & "] et fin pour arrter : " chaine=wscript.stdin.readLine ' fini ? If chaine="fin" Then Exit Do ' on compare la chane lue au modle de la date Set correspondances=modele.execute(chaine) ' a-t-on trouv une correspondance If correspondances.count0 Then ' on a au moins une correspondance For i=0 To correspondances.count-1 ' on affiche la correspondance i wscript.echo "J'ai trouv la correspondance " & correspondances(i).value Next Else ' pas de correspondance wscript.echo "Je n'ai pas trouv de correspondance" End If Loop Loop ' fini wscript.quit 0

RsultatsTapez le modle tester et fin pour arrter : ^\s*\d+(\,\d+)*\s*$ Tapez la chane tester avec le modle [^\s*\d+(\,\d+)*\s*$] et fin pour arrter : 18 J'ai trouv la correspondance [18] Tapez la chane tester avec le modle [^\s*\d+(\,\d+)*\s*$] et fin pour arrter : 145.678 Je n'ai pas trouv de correspondance Tapez la chane tester avec le modle [^\s*\d+(\,\d+)*\s*$] et fin pour arrter : 145,678 J'ai trouv la correspondance [ 145,678 ]

III-C - Intercepter les erreurs d'excutionUne autre mthode de gestion des erreurs d'excution est de les laisser se produire, d'en tre avertis et de les grer alors. Normalement lorsqu'une erreur se passe l'excution, WSH affiche un message d'erreur et le programme est arrt. Deux instructions nous permettent de modifier ce fonctionnement : 1 on error resume next Cette instruction indique au systme (WSH) que nous allons grer les erreurs nous mmes. Apres cette instruction, toute erreur est simplement ignore. par le systme. on error goto 0 Cette instruction nous ramne au fonctionnement normal de gestion des erreurs. Lorsque l'instruction on error resume next est active, nous devons grer nous-mmes les erreurs qui peuvent survenir. L'objet Err nous y aide. Cet objet a diverses proprits et mthodes dont nous retiendrons les deux suivantes :- 54 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

2

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

number : un nombre entier numro de la dernire erreur qui s'est produite. 0 veut dire "pas d'erreur" description : le message d'erreur qu'aurait affiche le systme si on n'avait pas mis l'instruction on error resume next

Regardons l'exemple qui suit : Programme' erreur non gre Option Explicit Dim nombre nombre=cdbl("abcd") wscript.echo "nombre=" & nombre

RsultatsC:\ err5.vbs(6, 1) Erreur d'excution Microsoft VBScript: Type incompatible: 'cdbl'

Grons maintenant l'erreur : Programme' erreur gre Option Explicit Dim nombre ' on gre les erreurs nous-mmes On Error Resume Next nombre=cdbl("abcd") ' y-a-t-il eu erreur ? If Err.number0 Then wscript.echo "L'erreur [" & err.description & "] s'est produite" On Error GoTo 0 wscript.quit 1 End If ' pas d'erreur - on revient au fonctionnement normal On Error GoTo 0 wscript.echo "nombre=" & nombre wscript.quit 0

RsultatsL'erreur [Type incompatible] s'est produite

Rcrivons le programme de saisie d'un entier >0 avec cette nouvelle mthode : Programme' lecture d'une donne jusqu' ce que celle-ci soit reconnue comme un nombre Option Explicit Dim fini, nombre ' on boucle tant que la donne saisie n'est pas correcte ' la boucle est contrle par un boolen fini, mis faux au dpart (= ce n'est pas fini) fini=false

- 55 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

ProgrammeDo While Not fini ' on demande le nombre wscript.stdout.write "Tapez un nombre entier >0: " ' on le lit nombre=wscript.stdin.readLine ' on teste le format de la donne lue On Error Resume Next nombre=cdbl(nombre) If err.number=0 Then ' pas d'erreur c'est un nombre ' on revient au mode normal de gestion des erreurs On Error GoTo 0 ' est-ce un entier >0 If (nombre-int(nombre))=0 And nombre>0 Then fini=true End If End If ' on revient au mode normal de gestion des erreurs On Error GoTo 0 ' msg d'erreur ventuel If Not fini Then wscript.echo "Erreur, vous n'avez pas tap un nombre entier >0. Recommencez svp..." Loop ' confirmation wscript.echo "Merci pour le nombre entier >0 : " & nombre ' et fin wscript.quit 0

RsultatsTapez un nombre entier >0: 4.5 Erreur, vous n'avez pas tap un nombre Tapez un nombre entier >0: 4,5 Erreur, vous n'avez pas tap un nombre Tapez un nombre entier >0: abcd Erreur, vous n'avez pas tap un nombre Tapez un nombre entier >0: -4 Erreur, vous n'avez pas tap un nombre Tapez un nombre entier >0: 1 Merci pour le nombre entier >0 : 1 entier >0. Recommencez svp... entier >0. Recommencez svp... entier >0. Recommencez svp... entier >0. Recommencez svp...

Commentaires : Cette mthode est parfois la seule utilisable. Il ne faut alors pas oublier de revenir au mode normal de gestion des erreurs des que la squence d'instructions susceptible de gnrer l'erreur est termine.

III-D - Application au programme de calcul d'imptsNous reprenons le programme de calcul d'impts dj crit pour, cette fois, vrifier la validit des arguments passs au programme : Programme' ' ' ' ' ' ' ' calcul de l'impt d'un contribuable le programme doit tre appel avec trois paramtres : mari enfants salaire mari : caractre O si mari, N si non mari enfants : nombre d'enfants salaire : salaire annuel sans les centimes aucune vrification de la validit des donnes n'est faite mais on vrifie qu'il y en a bien trois dclaration obligatoire des variables

- 56 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.http://tahe.developpez.com/web/vbscript/

INTRODUCTION AU LANGAGE VBSCRIPT par Serge Tah (tahe.developpez.com)

ProgrammeOption Explicit Dim syntaxe syntaxe= _ "Syntaxe : pg mari enfants salaire" & vbCRLF & _ "mari : caractre O si mari, N si non mari" & vbCRLF & _ "enfants : nombre d'enfants (entier >=0)" & vbCRLF & _ "salaire : salaire annuel sans les centimes (entier >=0)" ' on vrifie qu'il y a 3 arguments Dim nbArguments nbArguments=wscript.arguments.count If nbArguments3 Then ' msg d'erreur wscript.echo syntaxe & vbCRLF & vbCRLF & "erreur : nombre d'arguments incorrect" ' arrt avec code d'erreur 1 wscript.quit 1 End If ' on rcupre les arguments en vrifiant leur validit ' un argument est transmis au programme sans espaces devant et derrire ' on utilisera des expression rgulires pour vrifier la validit des donnes Dim modele, correspondances Set modele=new regexp ' le statut marital doit tre parmi les caractres oOnN modele.pattern="^[oOnN]$" Set correspondances=modele.execute(wscript.arguments(0)) If correspondances.count=0 Then ' erreur wscript.echo syntaxe & vbCRLF & vbCRLF & "erreur : argument marie incorrect" ' on quitte wscript.quit 2 End If ' on rcupre la valeur Dim marie If lcase(wscript.arguments(0)) = "o"Then marie=true Else marie=false End If ' enfants doit tre un nombre entier >=0 modele.pattern="^\d{1,2}$" Set correspondances=modele.execute(wsc