Apprendre le Batch :
Traitement des variables




Ce chapitre vous permettra enfin de comprendre à quoi servent les variables numériques :)
Il va encore ne faire que parler de 'SET' car il s'agit d'une commande très puissante qui a besoin d'être expliquée en détail.
Il va être scindé en trois parties : les opérations arithmétiques pour les variables numériques, quelques opérations sur les variables qui contiennent des chaines de caractères et un exercice pour s'entraîner.


1) Opérations arithmétiques basiques

Prenons un exemple : demander à l'utilisateur son âge.
@echo off

SET /p age_utilisateur=Quel age avez-vous en années :

pause>nul
Mettons que ça lui ferait plaisir de perdre quelques années, disons 10 ans :D
On sait que dans la variable age_utilisateur nous avons un nombre auquel nous allons devoir soustraire 10 car nous voulons lui faire perdre 10 ans, d'accord ?

Pour ça 2 solutions :
- Soit on modifie notre variable (déconseillé généralement car il peut être intéressant de toujours garder l'original) : age_utilisateur = age_utilisateur - 10
- Soit on en crée une nouvelle (meilleur solution) : age_modifie = age_utilisateur - 10

Le code pour la 1ère solution :
set /p age_utilisateur=Votre age :
REM On enlève 10 :
set /a age_utilisateur = age_utilisateur - 10

Le code pour la 2ème solution :
set /p age_utilisateur=Votre age :
REM On enlève 10 dans une nouvelle variable :
set /a age_modifie = age_utilisateur - 10


Dans tous les cas, n'oubliez surtout pas le /a, sinon ça ne peut pas marcher, enfin du moins ça donnera n'importe quoi et le pauvre gars qui utilise le programme va se poser des questions :roh:

Sachez que pour la première solution, il existe un raccourci, au lieu d'écrire deux fois la variable, on peut faire ceci :
set /p age_utilisateur=Votre age :
REM On enlève 10 :
set /a age_utilisateur -= 10
J'ai mis en rouge l'opérateur d'attribution, il est constitué d'un signe moins devant, c'est une technique plus rapide et plus lisible. A vous de choisir.


Maintenant que vous avez compris le principe, vous vous doutez bien que les opérations basiques sont toutes possibles comme l'addition, la soustraction (dont nous venons de traiter dans tout l'exemple pour ceux qu'auraient pas encore compris :p ), la multiplication et la division.

Je vais les représenter dans un exemple :
@echo off

REM On déclare un nombre qui sera toujours égal à 100
set /a nombre = 100

REM On déclara une variable qui utilise la division :
set /a nb_div = nombre / 20
REM Ca revient à : nb_div = 100 / 20 = 5

REM On déclara une variable qui utilise l'addition :
set /a nb_add = nombre + 10
REM Ca revient à : nb_add = 100 + 10 = 110

REM On déclara une variable qui utilise la multiplication :
set /a nb_mul = nombre * 2
REM Ca revient à : nb_mul = 100 * 2 = 200

pause>nul


Voila, donc c'est pas bien compliqué, voyez !
N'oublions pas les opérateurs d'attribution pour la division, l'addition et la multiplication, respectivement : /=, += et *=.

Vous pouvez utiliser des parenthèses afin de mettre vos propres priorité car les priorités arithmétiques sont les mêmes qu'en math (oui oui, la multiplication et la division sont prioritaire, pour ceux qui auraient oublié..) .
Encore un exemple :
@echo off

set /a mega_operation = -28,3 * (55 + 21)
echo %mega_operation%

pause>nul
Résultat :
-304


Je ne vous ai pas parlé des nombres à virgule, laissez-les tomber, ils ne sont pas gérés ou très mal.


Enfin pour clore cette partie, je ne vous parlerais pas des opérateurs bits à bits, car je les estime inutiles (personnellement je m'en suis servi qu'une seule fois de ma vie et encore c'était pour un projet très particulier..). Mais ceux qui sont intéressés qu'ils n'hésitent pas.


2) Opérations sur les chaines de caractères.

Dans cette partie, nous allons voir comment traiter les chaines de caractères.
C'est toujours utile de savoir ça ;)

Nous prendrons comme référence cette phrase : "Le petit chien noir est perdu !".

D'abord je vais vous expliquer comment sont comptés les caractères sinon vous comprendrez rien à la suite :-/
Le premier caractère d'une chaine de caractère est toujours 0, le deuxième caractère est 1 et ainsi de suite ..
Ce qui donne dans notre phrase :

'L' : Caractère n° 0.
'e' : Caractère n° 1.
' ' (espace) : Caractère n° 2.
'p' : Caractère n° 3.
'e' : Caractère n° 4.
...
'd' : Caractère n° 28.
'u' : Caractère n° 29.
' ' : Caractère n° 30.
'!' : Caractère n° 31.


A partir de là, on peut y aller.

a) Remplacement d'une ou plusieurs occurrences

Voici la commande :
set variable=%variable:occurrence=remplacement%
Explication :
variable : Donc ça n'a toujours pas changé, c'est le nom de votre variable, la variable affectée peut être différente de la variable affectante, ça ne pause pas de soucis (ex:set new_var=%var:x=y%).
occurrence : C'est la chaine à rechercher dans votre chaine de caractère. Si elle commence par une astérisque '*', elle ne sera remplacé que par la première occurence en partant du début.
remplacement : C'est la nouvelle chaine qui va remplacer toutes les occurrences de la chaine précédente.

Exemple :
@echo off

REM On définit notre variable
set chaine=Le petit chien noir est perdu !

REM Et on la modifie : on remplace chien par chat
set new_chaine=%chaine:chien=chat%

echo %new_chaine%

pause>nul
Résultat :
Le petit chat noir est perdu !


On peut le faire avec une seule lettre aussi :
@echo off

REM On définit notre variable
set chaine=Le petit chien noir est perdu !

REM Et on la modifie : on remplace e par a
set new_chaine=%chaine:e=a%

echo %new_chaine%

pause>nul
Résultat :
La patit chian noir ast pardu !


b) Sélectionner une partie de la chaine

Voici la commande :
set variable=%variable:~nombre1,nombre2%
Explication :
variable : Pareil que précédemment.
nombre1 : La sélection commence à partir de tant de caractères. Si nombre1 est négatif, alors la sélection commence à partir de la fin, sinon elle commence à partir du début. C'est pour nombre1 que je vous faisais l'explication du décomptage de caractère dans une chaine.
nombre2 : Nombre de caractères à sélectionner. Option non obligatoire auquel cas la sélection se ferait automatiquement jusqu'à la fin. S'il est négatif alors la sélection se ferait sans ces caractères en partant de la fin, s'il est positif elle ne sera constitué que de ces caractères.

Quelques exemples pour bien comprendre :

Exemple 1 :
@echo off

REM On définit notre variable
set chaine=Le petit chien noir est perdu !

REM Et on la modifie : on sélectionne à partir du 4ème
REM caractère et on sélectionne 8 caractères.
set new_chaine=%chaine:~3,8%

echo %new_chaine%

pause>nul
Résultat :
petit ch


Exemple 2 :
@echo off

REM On définit notre variable
set chaine=Le petit chien noir est perdu !

REM Et on la modifie : on sélectionne à partir du 10ème
REM caractère en partant de la fin et on sélectionne 4 caractères.
set new_chaine=%chaine:~-10,4%

echo %new_chaine%

pause>nul
Résultat :
st p


Exemple 3 :
[code=batch]@echo off

REM On définit notre variable
set chaine=Le petit chien noir est perdu !

REM Et on la modifie : on sélectionne à partir du 5ème
REM caractère et on supprime 10 caractères en partant de la fin
set new_chaine=%chaine:~5,-10%

echo %new_chaine%

pause>nul
Résultat :
tit chien noir e


Je pense que ça suffira :)

Maintenant que nous savons tout ça, je vous propose un petit exercice pour terminer avec de la pratique.


3) Exercice : Transformateur de texte

Héhé, un exercice qui a pour but de résumer un peu tout, ça vous fera pas mal tas de mollassons !

L'objectif : Vous entraîner et vous faire un peu souffrir après ce que j'ai enduré :cool:

Le principe
: Je vais vous donner un texte assez court et vous allez devoir le mettre entièrement en majuscule. Facile, non ?

Le texte :

Les frites sont des pommes de terre coupees en morceaux allonges et cuites en friture, autrefois dans de la graisse de boeuf et depuis plutot dans de l'huile d'arachide, de preference dans une machine dediee (celle-ci appelee friteuse).


ALLEZ GO ! Au travail !






La solution :
--
--
--
Vous avez déjà fini ?
--
--
--
--
--
Sûr ?
--
--
Ok, voilà la solution (écrite en petite, recopiez-la dans votre bloc-notes plutôt pour pas vous dégommer les noeils) :
@echo off

REM On définit notre variable
set texte=Les frites sont des pommes de terre coupees en morceaux allonges et cuites en friture, autrefois dans de la graisse de boeuf et depuis plutot dans de l'huile d'arachide, de preference dans une machine dediee (celle-ci appelee friteuse).

REM On met chacune des minuscules en majuscules
set texte=%texte:a=A%
set texte=%texte:b=B%
set texte=%texte:c=C%
set texte=%texte:D=D%
set texte=%texte:e=E%
set texte=%texte:f=F%
set texte=%texte:g=G%
set texte=%texte:h=H%
set texte=%texte:i=I%
set texte=%texte:j=J%
set texte=%texte:k=K%
set texte=%texte:l=L%
set texte=%texte:m=M%
set texte=%texte:n=N%
set texte=%texte:o=O%
set texte=%texte:p=P%
set texte=%texte:q=Q%
set texte=%texte:r=R%
set texte=%texte:s=S%
set texte=%texte:t=T%
set texte=%texte:u=U%
set texte=%texte:v=V%
set texte=%texte:w=W%
set texte=%texte:x=X%
set texte=%texte:y=Y%
set texte=%texte:z=Z%

REM Et on affiche le résultat
echo Voici le nouveau texte en majuscules :
echo %texte%

pause>nul


Voilà pour ce chapitre, n'hésitez pas à faire des essais chez vous ;)

Utilisateurs d'AdBlock et autres : Par pitié désactivez AdBlock, vous détruisez mon unique source de revenue et un jour, tous les petits sites comme celui-là n'existeront plus mais il sera trop tard. Prenez conscience de ceci et faites un geste, merci.

Il y a 5 personnes sur le site.
Chargement de la page avec 2 requêtes MySQL en 0.7592 seconde(s).

Site et design crées par Yoshito (Webmaster)
© 2006-2008 - www.ToutLeDOS.com - Tous droits réservés

Sans oublier...
Les ressources - Contact - FauxVirus.com