Programmation Basic Script sous Mach3

Aller en bas

Programmation Basic Script sous Mach3 Empty Programmation Basic Script sous Mach3

Message  dh42 Mer 13 Jan 2021 - 5:26

Salut Wink

Les variables

En programmation, une variable est une "mémoire" à laquelle on donne un nom et dans laquelle il est possible de stocker une valeur, qui peut être de différents types (entier, réel, texte, booléen, etc ...)

Cette valeur, une fois stockée, peut être rappelée, modifiée ; autrement dit son contenu peut varier, d’où le nom de variable.

Dans le cas d'une programmation "propre",  l'utilisation d'une variable se fait en 2 temps:

- 1) Déclaration de la variable: Il s'agit de dire au programme que tu veux utiliser une variable d'un certain type et dont tu vas aussi définir le nom.

ex:

Dim a As Long

déclare une variable nommée "a" qui sera du type "entier long signé" ; cette déclaration se fait une seule fois, généralement en début de programme ou de sous programme.

-2) affectation d'une valeur à cette variable.

ex:

a = 5000

la variable "a" contiendra donc 5000 une fois cette ligne exécutée.

la valeur affectée à la variable doit être compatible avec le type de variable, ici on a déclaré "a" comme une variable pouvant contenir un entier long, donc la valeur qu'on lui affecte doit être un entier et il ne doit pas dépasser les limites acceptables par ce type de variable ; Dans le cas d'un entier long signé, la valeur doit être comprise entre −2 147 483 648 et  +2 147 483 647)

Dans la cas de Mach3, il est possible de faire l'impasse sur la déclaration de variable, et dans ce cas, elle sera déclaré automatiquement lorsque tu l'utiliseras pour la 1ière fois. (ici quand le programme rencontrera le a = 5000) ..Par contre cette méthode ne permet pas de définir le type de variable, ce sera automatiquement une variable de type "variant", qui peut contenir tout type de donnée ... mais qui ralentis le fonctionnement et surtout, sur un programme complexe, peut induire le programmeur en erreur.

Si tu veux tester le fonctionnement sur Mach3, crée un bouton VB script et entre le code suivant:

Code:
Dim a As Long 'déclaration d'une variable de type "Long" nommée "a"
a = 5000 'affectation de la valeur 5000 à cette variable
message(a) 'écrit le contenu de la variable dans la ligne de message

lorsque tu cliquera sur le bouton, la fonction message() affichera le contenu de la variable "a" dans la ligne de message de Mach3, soit 5000

ici, un peu plus compliqué  Very Happy  .. on crée 3 variables de type "double précision" appelées a, b et c et on va faire des calculs avec ces variables et afficher des résultats.

on commence par déclarer les 3 variables de type réel en double précision (donc des nombres à virgules)

Dim a As Double
Dim b As Double
Dim c As Double


puis on affecte des valeurs à deux des variables (la 3ieme sera utilisée pour y stocker un résultat, donc pas besoin d'y mettre une valeur pour l'instant)

a = 12.5
b = 2


maintenant on va diviser a par b et afficher directement le résultat dans une boite de message

MsgBox(a/b)

on peut aussi utiliser une variable intermédiaire si on a besoin de conserver ce résultat pour autre chose.

ici on affecte le résultat du calcul "a puissance b" à la variable c, puis on affiche le contenu de la variable "c"

c = a^b
MsgBox(c)


le programme complet

Code:
Dim a As Double
Dim b As Double
Dim c As Double
a = 12.5
b = 2
MsgBox(a/b)
c = a^b
MsgBox(c)

On utilise très souvent des variables texte, qui seront affichées telles quelles.

par exemple pour déclarer une variable "nom" dans laquelle on stockera un nom

Dim mon_nom As String
mon_nom = "David"
MsgBox(mon_nom)


le texte qui doit être stocké dans la variable texte DOIT être entouré de double cotes (") .. il peut bien entendu contenir des espaces des chiffres et autres signes de ponctuation.

Les noms de variables ne doivent pas contenir d'espaces, elles ne doivent pas commencer par un chiffre (mais peuvent en contenir) et ne doivent pas avoir le même nom qu'une fonction ou qu'un mot clef du langage. (par exemple, tu ne peux pas nommer une variable "if" car c'est un mot clef du basic) elles ne doivent contenir que des caractères ANSI (pas de caractères accentués, mais uniquement les 26 lettres de l'alphabet, en minuscule ou majuscule) elles ne doivent pas contenir de symboles de ponctuation, seul l'underscore est autorisé (_)

Il n'y a pas de différentiation entre les majuscules et les minuscules, donc les noms de variables suivants font référence à une même variable.

MaVariable, mavariable, Mavariable, MAVARIABLE, etc ....

mais MaVariable et Ma_Variable sont bien deux variables différentes.

C'est du ressort du programmeur de choisir sa méthode pour nommer les variables en fonction de ses gouts et de sa façon de s'organiser pour s'y retrouver ..

les types de variables du VB Script sont listées sur la Doc du Basic Cypress, page 8

Les plus utilisées sont Double, String et Boolean

Voila pour une première approche.

suite au prochain épisode Wink

Menu

Branchements conditionnels - If/Then/Else

Branchements conditionnels - Select/Case

++
David


Dernière édition par dh42 le Ven 12 Fév 2021 - 0:01, édité 8 fois

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  jp1973 Ven 15 Jan 2021 - 22:19

salut david Cool

variables ok !  ( j'ai fait ma petite fiche pense bête  sourire02 )
jp1973
jp1973
posteur Régulier
posteur Régulier

Messages : 146
Points : 152
Date d'inscription : 26/10/2020
Age : 47
Localisation : 46

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Ven 15 Jan 2021 - 22:34

Ok, la suite tout à l'heure Wink

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Ven 15 Jan 2021 - 23:43

Salut

Ok, donc on va passer aux branchements conditionnels.

Dans un programme simple comme vu sur le message à propos des variables, le programme se déroule de manière séquentielle, c.a.d. ligne après ligne.

Parfois (souvent même) il est nécessaire de prendre une décision en fonction d'un résultat, ou d'une saisie utilisateur, et d'exécuter un code plutôt qu'un autre.

Le plus utilisé des branchements conditionnels, c'est le If/Then/Else (Si/Alors/Sinon)

On va écrire un code qui demandera une valeur numérique à l'utilisateur, qui testera si une valeur a bien été fournie par l'utilisateur, et qui, en fonction de cette valeur, affichera si elle est inférieure à 10 ou supérieur ou égale à 10. Si aucune valeur n'est donnée, on aura une gestion d'erreur qui affichera "pas de valeur !"

Ce bout de programme introduit aussi la notion de Sub ; c.a.d de "sous programme". Dans le cas présent, il n'y a que le programme principal, représenté par la Sub main(). Ce programme principal DOIT s'appeler main() afin que VB sache que c'est la Sub à exécuter en 1ier (la il n'y en a qu'une, donc il ne peut pas se tromper)

Cette Sub principale doit se terminer par un End Sub ; dans ce cas, le programme se termine donc quand il rencontre le End Sub

J'introduis aussi la notion de conversion de type de donnée et la fonction permettant de demander une valeur à l'utilisateur.

Code:
Sub main()

   Dim a As Double
   Dim mavaleur As String

   mavaleur = InputBox("entrez une valeur")

   If(mavaleur = "") Then
      MsgBox("pas de valeur !")
      Exit Sub
   End If

   a = Val(mavaleur)
   
   If (a < 10) Then
      MsgBox("a < 10")
   Else
      MsgBox("a >= 10")
   End If
   
End Sub

Dim a As Double
Dim mavaleur As String


Jusque la, rien de bien nouveau ; on déclare 2 variables ; "a" comme variable permettant de stocker une valeur numérique décimale et "mavaleur" permettant de stocker une chaine de caractère.

mavaleur = InputBox("entrez une valeur")

La fonction InputBox() affiche une boite de dialogue à l'écran et permet de saisir n'importe quel texte dans la ligne. Elle fournit aussi 2 boutons OK et Cancel permettant de valider ou d'annuler la saisie.

Le texte "entrez une valeur" sera affiché dans la boite comme libellé.

Une fois que l'on aura cliqué sur OK ou Cancel, la fonction retournera le résultat de la saisie dans la variable texte "mavaleur"

Si on ne saisit rien dans la boite de dialogue, ou si on clique sur Cancel, "mavaleur" contiendra une chaine vide (autrement dit, ne contenant aucun caractère)

On passe maintenant au 1ier test IF

If(mavaleur = "") Then
     MsgBox("pas de valeur !")
     Exit Sub
End If


L'expression entre les parenthèses du If() est tout d'abord évaluée ; elle retournera vrai ou faux ; ici on teste si la variable mavaleur vaut "" (chaine vide) ; le but étant de gérer le Cancel (qui renvoi une chaine vide) ; si on clique sur Cancel, le programme devra se terminer.

Tout ce qui se trouve entre la ligne If(mavaleur = "") Then et la ligne End If sera exécuté si le résultat du test est vrai, sinon, on sautera directement à ce qui se trouve après le End If sans exécuter le code entre le If et le End If

Donc dans le cas ou mavaleur = chaine vide (""), on exécutera:

MsgBox("pas de valeur !") ' affiche un message disant qu'il n'y a pas de valeur
Exit Sub ' on sort de la Sub en cours, ce qui, dans ce cas, met fin au programme.

Conversion du type de donnée

a = Val(mavaleur)

On veut faire un test sur une valeur numérique, mais la fonction InputBox() retourne obligatoirement une valeur texte ; on va donc devoir convertir cette valeur texte en valeur numérique.

C'est le travail de la fonction Val() ; elle prend un texte (ou une variable texte) en argument, ici la variable mavaleur et retourne son équivalent numérique en analysant les caractères qu'elle contient. La valeur de retour est affectée à "a"

On se retrouve donc avec "a" qui contient une valeur numérique.

Ensuite, on effectue un nouveau test If() pour savoir si "a" est < à 10 ou supérieur ou égal à 10

C'est le même principe que le If précédant, mais ici on ajoute un Else (sinon) qui va nous permettre de choisir entre deux options ; soit le test est vrai et on affiche a < 10, soit il est faux et on affiche a >= 10

If (a < 10) Then
    MsgBox("a < 10")
Else
    MsgBox("a >= 10")
End If


Si "a" est  < à 10, alors on exécute le code entre le If et le Else, puis on saute à la fin en ignorant ce qui est entre le Else et le End If et on continu donc le programme après le End If.

Si la condition du test n'est pas vérifié, c.a.d. si "a" n'est pas < à 10, alors on exécute la 2ieme "branche" de l'instruction, c.a.d le code qui se trouve entre le Else  et le End If

Le programme continu ensuite après le End If

Chaque "branche" du If/Then/Else peut bien sûr contenir plusieurs lignes de code.

à plus tard pour une autre instruction de branchement conditionnel permettant un plus grand nombre de choix

++
David


Dernière édition par dh42 le Jeu 11 Fév 2021 - 20:48, édité 1 fois

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  jp1973 Sam 16 Jan 2021 - 0:21

ok ça va , je suis .......faut dire qu'un développement clair  y est pour beaucoup... Wink  Smile  

Chaque "branche" du If/Then/Else peut bien sûr contenir plusieurs lignes de code .

je suppose que l'on peut mettre autant de if que "l'on veut" en "cascade" ..

m'en vais quand même faire une autre fiche sourire02

PS : au fur et à mesure j’effacerais mes messages pour ne pas polluer et ainsi préserver l'intégrité de ce post pour les générations futures ....de programmateurs siffle Cool Wink
jp1973
jp1973
posteur Régulier
posteur Régulier

Messages : 146
Points : 152
Date d'inscription : 26/10/2020
Age : 47
Localisation : 46

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Sam 16 Jan 2021 - 0:45

je suppose que l'on peut mettre autant de if que "l'on veut" en "cascade" ..

Oui, tout à fait ; il y a même une syntaxe avec un ElseIf à la place du Else sur le VB (à vérifier si elle y est sur le VB Cypress)

Par contre ça peut vite devenir illisible, donc .... il y a mieux que le If/Then ; on verra ça au prochain épisode Wink

PS : au fur et à mesure j’effacerais mes messages pour ne pas polluer et ainsi préserver l'intégrité de ce post pour les générations futures ....de programmateurs

Pas si tu pose des questions, les questions font partie de l'apprentissage, donc elles sont utiles au sujet Wink

Ne t'inquiète pas, s'il y a des messages de "flood" sans intérêt pour la compréhension de la chose, je les effacerais ...

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  meles Sam 16 Jan 2021 - 7:34

dh42 a écrit:il y a même une syntaxe avec un ElseIf à la place du Else sur le VB (à vérifier si elle y est sur le VB Cypress)

Ca sent le "case" tout ça ! Je trouve que Val() c'est pas très intuitif. Y'a un distingo entre les entiers et les flottant dans les types ?

_________________
meles
meles
Admin
Admin

Messages : 12651
Points : 19558
Date d'inscription : 13/05/2011
Age : 49
Localisation : Aubagne

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  jp1973 Sam 16 Jan 2021 - 13:28

On veut faire un test sur une valeur numérique, mais la fonction InputBox() retourne obligatoirement une valeur texte ; on va donc devoir convertir cette valeur texte en valeur numérique.

C'est le travail de la fonction Val() ; elle prend un texte (ou une variable texte) en argument, ici la variable mavaleur et retourne son équivalent numérique en analysant les caractères qu'elle contient. La valeur de retour est affectée à "a"

peux tu développer " retourne son équivalent numérique en analysant les caractères qu'elle contient" .
si j'ai compris seuls les chiffres de la chaîne de caractères seront renvoyés , ou il y a transformation d'un texte en équivalent numérique ? scratch
jp1973
jp1973
posteur Régulier
posteur Régulier

Messages : 146
Points : 152
Date d'inscription : 26/10/2020
Age : 47
Localisation : 46

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Sam 16 Jan 2021 - 19:08

salut,

Ca sent le "case" tout ça !

Exact Wink

Y'a un distingo entre les entiers et les flottant dans les types ?

Oui ; Integer = entier courts (2 octets), Long = entiers longs (4 octets), Single = Réels courts (4 octets), Double = Réels longs (8 octets)
(Réels = valeurs contenant une partie décimale)

Dans le VB actuel (pas celui parlé par Mach3, qui date un peu), il y en a d'autres en plus, car on peut aussi avoir des entiers non signés, mais ils ne semblent pas exister sur le VB Cypress.


peux tu développer " retourne son équivalent numérique en analysant les caractères qu'elle contient" .
si j'ai compris seuls les chiffres de la chaîne de caractères seront renvoyés , ou il y a transformation d'un texte en équivalent numérique ?

La réaction diffère suivant le VB utilisé ; apparemment dans le VB de Mach3, si il y a autre chose que des chiffres et caractères numériques (- + .) dans la chaine de caractères, ça renvoi une erreur (en mode pas à pas), alors que sur le VB "normal" (ex: les script CamBam) la fonction tente de créer un nombre avec les caractères numériques, mais dès qu'un caractère non numérique est rencontré, la fonction ne vas pas plus loin.

ex, dans le VB de CamBam: Val("12G") renvoi 12 ; Val("12H3") renvoi aussi 12, Val("K12") renvoi 0

Il existe une fonction IsNumeric() qui renvoi True (vrai) ou False (faux) en fonction du contenu de la chaine de caractère ; si elle peut être entièrement convertie en nombre, ça renvoi vrai, sinon faux. (si chaine vide, c'est considéré comme numérique = 0)

un exemple pour tester si la valeur saisie est convertible en valeur numérique

Code:
Sub main()
   
   Dim txt As String
   Dim a As Double

   txt = InputBox("entrez une valeur")
   
   If(txt = "") Then Exit Sub 'sortir si chaine vide (= cancel ou pas de saisie)

   If IsNumeric(txt) Then 'si convertible en numérique
          MsgBox("numérique")
          a = Val(txt)
   Else 'non convertible sortir de la sub
          MsgBox("non numérique")
          Exit Sub
   End If

   MsgBox(a)

End Sub

Note la version courte du If/Then dans If(txt = "") Then Exit Sub ; une instruction peut être mise après le Then, et pas besoin de End If dans ce cas.

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  jp1973 Sam 16 Jan 2021 - 23:27

Oui ; Integer = entier courts (2 octets), Long = entiers longs (4 octets), Single = Réels courts (4 octets), Double = Réels longs (8 octets)
(Réels = valeurs contenant une partie décimale)

besoin là aussi d'une remise à niveau avec les octets ,  j'en suis resté à mes acquis d'école  1 octets =8 bytes
 sourire02
jp1973
jp1973
posteur Régulier
posteur Régulier

Messages : 146
Points : 152
Date d'inscription : 26/10/2020
Age : 47
Localisation : 46

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Sam 16 Jan 2021 - 23:43

1 octets =8 bytes

Non, 1 Octet = 8 Bits

Byte = Octet en Anglais Wink (1 Byte = 8 Bits)

PS regarde page 8 de la doc pour la liste complète des types de données du Basic Cypress Wink

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Sam 16 Jan 2021 - 23:59

docs en ligne  

le Cypress Basic Script
https://www.machsupport.com/wp-content/uploads/2013/02/VBScript_Commands.pdf

Les fonctions spécifiques de Mach3
https://www.machsupport.com/wp-content/uploads/2013/02/Mach3_V3.x_Macro_Prog_Ref.pdf

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  jp1973 Dim 17 Jan 2021 - 11:39

bonjour  David et meles .

Ce programme principal DOIT s'appeler main() afin que VB sache que c'est la Sub à exécuter en 1ier (la il n'y en a qu'une, donc il ne peut pas se tromper)

Cette Sub principale doit se terminer par un End Sub ; dans ce cas, le programme se termine donc quand il rencontre le End Sub ...............MsgBox("pas de valeur !") ' affiche un message disant qu'il n'y a pas de valeur
Exit Sub on sort de la Sub en cours, ce qui, dans ce cas, met fin au programme.


la différence entre les deux , c'est que exit sub  permet la continuité du programme si la condition est remplie , alors que End Sub stoppe/ferme le programme ?
comment se présente  l' arborescence entre  le Sub Main () (programme principal) et  les Sub()  (sous- programme ) ?
jp1973
jp1973
posteur Régulier
posteur Régulier

Messages : 146
Points : 152
Date d'inscription : 26/10/2020
Age : 47
Localisation : 46

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Dim 17 Jan 2021 - 23:58

Salut,

Exit Sub sort de la sub en cours sans attendre d'être arrivé à End Sub.

Si on est dans la sub main(), Exit sub ou End Sub termine le programme. Si on est dans une autre sub, ça termine la sub en cours et on continu le programme à l’instruction suivant l'appel de la sub dans la sub appelante.

ex:

Sub main()
    ....
    ....
    Masub() 'appel de la sub Masub()
    .... on continu ici une fois Masub() exécutée
    ...
End Sub

Sub Masub()
    ...
    ...
End Sub

dans la sub main(), quand le programme rencontre Masub(), il exécute ce qui se trouve entre Sub Masub() et son End Sub, puis une fois la sub Masub() terminée, il retourne dans la sub main() et continu avec l'instruction qui est juste après l'appel Masub() et ce jusqu'au End sub de la sub main(), puis se termine.

++
David


Dernière édition par dh42 le Jeu 11 Fév 2021 - 20:50, édité 2 fois

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  jp1973 Lun 18 Jan 2021 - 12:23

salut , Very Happy
si j'ai bien compris un programme principal est " jalonné par des bornes " Sub main () et end sub . on y trouve ces déclarations et affectations de variables et ces instructions (fonctions) qui lui sont propres et éventuellement des appels de sous-programmes Sub xxx () . on peut aussi y inclure des sorties de programme exit Sub . Les sous-programmes sont eux aussi " jalonnés par des bornes " Sub xxx () et end Sub , et sont édités les uns aprés les autres à la suite du programme principal .
jp1973
jp1973
posteur Régulier
posteur Régulier

Messages : 146
Points : 152
Date d'inscription : 26/10/2020
Age : 47
Localisation : 46

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Mar 19 Jan 2021 - 0:21

Salut,

Oui, c'est ça, et chaque Sub (ou Fonction) peux avoir ses propres variables, indépendantes de celle des autres Sub/Fonctions ... on verra ça bientôt.

Note que le terme Sub est spécifique au Basic script (ainsi qu'au VB script et au VB) ; dans les autres langages on ne fait pas de distinction entre Sub et Fonction, les "sous programme" s’appellent tous des Fonctions.

En VB, la seule différence entre une Sub et une Fonction, c'est qu'une Sub ne retourne aucune valeur, alors qu'une fonction en retourne une.

Par exemple, InputBox() est une fonction (intégrée au langage) car elle retourne une valeur dans une variable ( a = InputBox(...) )

Un programme contient au moins une Sub principale et peux contenir un nombre indéfini de Sub/Fonctions qui peuvent être appelées par le programme principale mais aussi par d'autres Sub/Fonctions.

Les Sub/Fonctions peuvent être partie intégrante du langage, comme MsgBox(), InputBox, elle peuvent provenir de Windows, ou elles peuvent être créées par le programmeur.

Les fameuses .dll, ne sont ni plus ni moins que des "bibliothèques" de fonctions, sans programme principal, les fonctions de ces bibliothèques peuvent être appelées par ton programme, du moment que tu déclare la bibliothèque (dll) à utiliser en début de programme.

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  jp1973 Mar 19 Jan 2021 - 1:18

salut david
.......et chaque Sub (ou Fonction) peux avoir ses propres variables, indépendantes de celle des autres Sub/Fonctions ... .

là ça va ...

Par exemple, InputBox() est une fonction (intégrée au langage) car elle retourne une valeur dans une variable ( a = InputBox(...) )

là j'ai  pas vraiment  encore intégré   le concept  "retourne une valeur dans une variable" ...
il va me falloir des exemples . parce que j'suis  vraiment pas sûr mais  je crois  que tout peut être renvoyé comme valeur ( texte , nombre ,etc etc ) . je pédale dans la S'moule  ..


Un programme contient au moins une Sub principale et peux contenir un nombre indéfini de Sub/Fonctions qui peuvent être appelées par le programme principale mais aussi par d'autres Sub/Fonctions.

là çà va ....


Les Sub/Fonctions peuvent être partie intégrante du langage, comme MsgBox(), InputBox, .

là c'est oui /ouais  , en fait c'est le " peuvent " qui me déroute ...

Les fameuses .dll, ne sont ni plus ni moins que des "bibliothèques" de fonctions, sans programme principal, les fonctions de ces bibliothèques peuvent être appelées par ton programme, du moment que tu déclare la bibliothèque (dll) à utiliser en début de programme.

là ça va ...

je pourrais comparer  ma compréhension actuelle a ce que l'on peut voir au travers d'une vitre avec brise vue ..... je devine ou crois comprendre et puis je doute .... What a Face  Very Happy
jp1973
jp1973
posteur Régulier
posteur Régulier

Messages : 146
Points : 152
Date d'inscription : 26/10/2020
Age : 47
Localisation : 46

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Mar 19 Jan 2021 - 1:56

La compréhension viendra au fur et à mesure que l'on avancera dans le tuto ; il ne faut pas bruler les étapes Wink .. pour l'instant on n'en est pas encore aux fonctions/sub ...

là j'ai  pas vraiment  encore intégré   le concept  "retourne une valeur dans une variable" ...

Et bien par exemple, la fonction Beep() fait quelque chose (elle produit un son "bip") , mais tu n'en attends pas un résultat en retour, donc elle s'écrit simplement

Beep()

(Beep sans les parenthèses dans le cas de Mach3 ; particularité de la syntaxe du Basic Cypress)

la fonction InputBox() par contre retourne une valeur, qui est ce que tu a saisi dans la boite de dialogue ... et il faut bien récupérer cette valeur retournée ; dans ce cas elle s'écrit

a = InputBox()

"a" contiendra la "réponse" de la fonction, donc la valeur saisie (sous forme d'une chaine de caractère dans le cas de cette fonction)

même chose avec une fonction sinus

a = Sin(90)

la fonction Sin() calculera le sinus de 90 et le résultat sera renvoyé par la fonction et sera stocké dans la variable "a"

là c'est oui /ouais  , en fait c'est le " peuvent " qui me déroute ...

Certaines fonctions font partie intégrante du basic, et donc elles seront utilisables dans tous les programmes basic script que se soit sous Mach3, CamBam, Excel, Word, etc, mais certaines fonctions ne font pas partie du basic et sont spécifiques à une application ; par exemple la fonction GetOEMDro() de Mach3 est spécifique à Mach3 et sera inconnue si tu tentais de l'utiliser sous CamBam ou sous Word.

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  WF Lun 25 Jan 2021 - 15:09

Bonjour excusez moi d intervenir dans ce  sujet
Mais voila est ce que la manière d ecrire influe sur les résultats
exemple  GetOEMDRO  =GetOEMDro =GetoemDRO =GetOemdro etc etc....
et est ce que cela à de  l influence entre Macro ecritent de differente maniere dans mach3
genre M80=GetOEMDRO et M82=GetOEMDro  faut il une cohérence dans la manière d écrire le VB cypress dans les différents programme ?
Merci pour votre aide  ce sujet est vraiment d une très grande aide
à bientôt
WF
WF
je prends du galon
je prends du galon

Messages : 90
Points : 133
Date d'inscription : 17/09/2018
Age : 68
Localisation : Bondy

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Lun 25 Jan 2021 - 15:20

Salut

Le VB script n'est pas sensible à la casse, donc toutes tes écritures de GetOEMDRO sont Ok (même chose que pour les noms de variables)

faut il une cohérence dans la manière d écrire le VB cypress dans les différents programme ?

Non, c'est plus une question "d’esthétique" pour le programmeur.

... et tu n'a pas à t'excuser, le sujet est ouvert à tous Wink

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation VB Script sous Mach3

Message  WF Jeu 28 Jan 2021 - 19:22

Bonjour à tous
juste une question pour enregistrer une Macro souvent mes modifications ne sont pas enregistrées ???
avec le script éditeur de Mach3 il y a Save = enregistré
il y a Save as = enregistré sous
et Save Hidden script le script caché ????

il y a aussi dans Machscreen l'éditeur Machscreen pour les boutons
" exécuter le code " qui ouvre une fenêtre avec le code et enregistrer sous OK
et " Utiliser les données et fermer " ?????
et enfin " inclure les données au jeu d écran "
dans machscreen la numérotation des lignes ne fonctionne pas ?????
merci pour vos lumières
WF
WF
je prends du galon
je prends du galon

Messages : 90
Points : 133
Date d'inscription : 17/09/2018
Age : 68
Localisation : Bondy

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Jeu 28 Jan 2021 - 21:30

Salut,

Quand tu fait un script accroché à un bouton, il est sauvé directement dans le screenset (*), lors de l'édition du script, il est temporairement copié dans un fichier nommé HiddenScript.m1s, le temps de l'édition ; si tu explore le contenu du fichier HiddenScript du dossier macros de ton profil en cours, tu verra qu'il change en fonction du bouton que tu a édité en dernier.

(*) la définition du screenset est un fichier .set ; il contient toute les infos sur la position et l'apparence des objets graphiques (boutons, visu, etc) mais aussi le code VB des macros accrochées aux boutons.

Que tu fasse "save" ou que tu ferme la fenêtre et que tu réponde oui à "save HiddenScript", c'est la même chose, le contenu sera sauvé dans HidenScript.m1s et bien sûr également dans le fichier .set du screenset.

Si tu fais "save as", tu peux donner un nom spécifique à un script, qui deviens alors un fichier script séparé ; dans ce cas, le script n'est pas sauvé dans HidenScript.m1s, ni dans le screenset. C'est ce qu'il faut utiliser si tu veux créer une macro indépendante du screenset, comme par exemple un code M.

Donc pour résumer, quand tu édite un bouton, ferme simplement l'éditeur et répond oui lorsqu'il te demande de sauver le HiddenScript.

Sous Machscreen, l'équivalent de sauver HiddenScript, c'est "inclure les données au jeu d'écran"

"Utiliser les données et fermer" ne sauve pas les modifs ; cela te permet de tester une modif sur un script sans l'enregistrer ; par contre quand tu fermera Machscreen il te demandera si tu veux sauver les modifs ; ce qui inclue les modifs faites dans le code des boutons.

Tu remarquera que parfois quand tu ouvre un screenset dans Machscreen, tu a un message d'erreur "Fichier corrompu, continuer" ; clique sur OUI ; ce problème se produit quand un script à été édité directement depuis Mach3 ; ça ne semble pas prêter à conséquence ; il suffit d'ouvrir le script du bouton sous Machscreen et de le sauver pour que le message disparaisse.

dans machscreen la numérotation des lignes ne fonctionne pas ?????

Il y a bien longtemps que l'on n'utilise plus les n° de ligne en programmation en Basic ... Wink l'option est donc désactivée quand tu affiche du basic, par contre elle fonctionne pour le Gcode (donc si tu crée un bouton GCode)

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation VB Script sous Mach3

Message  WF Sam 30 Jan 2021 - 11:14

Bonjour à Tous et Bonjour DH42
comme on dit " Fia lux" que la lumière soit
une fois de plus c est clair et limpide
Mille Merci
WF
WF
je prends du galon
je prends du galon

Messages : 90
Points : 133
Date d'inscription : 17/09/2018
Age : 68
Localisation : Bondy

Revenir en haut Aller en bas

Programmation Basic Script sous Mach3 Empty Re: Programmation Basic Script sous Mach3

Message  dh42 Jeu 11 Fév 2021 - 20:17

Branchements conditionnels - Select/Case

Nous avons vu plus haut le If/Then/Else qui nous permet de choisir entre deux options, suivant que le test retourne Vrai ou Faux.

L'instruction Select/Case quand à elle permet de définir une liste de choix.

La forme est la suivante.

Select Case mavariable
              Case valeur1
                             code à exécuter si mavariable = valeur1
              Case valeur2
                             code à exécuter si mavariable = valeur2
              Case valeur3
                             code à exécuter si mavariable = valeur3
              Case Else
                             code à exécuter si mavariable ne correspond à aucun des autres choix
End Select
 
Exemple, nous allons faire une saisie d'un nombre entier, ce nombre sera testé et différentes actions seront faites suivant que le nombre vaut 1,3 ou 10, ou s'il est différent d'une de ces trois valeurs.
On commence par saisir une donnée, puis par la convertir en numérique (parce que l'on veux faire un test sur un nombre.  

  
Dim monchoixtxt As String 'une variable 'chaine de caractères'
Dim monchoix As Long 'la variable qui contiendra la conversion en numérique de la chaine de caractères
monchoixtxt = InputBox("Votre choix","","0") 'saisir une entrée utilisateur

monchoixtxt contient la chaine de caractères saisie

Maintenant on teste si on a eu une réponse et non une annulation (si annulation, monchoix contient une 'chaine vide' = "" .. et si c'est OK, on convertit la chaine en son équivalent numérique, qui se retrouvera dans la variable monchoix

If monchoixtxt <>"" Then          
monchoix = Val(monchoixtxt) 'conversion en numérique

à partir de la, on va utiliser le Select/Case pour exécuter une séquence de code en fonction du choix

Select Case monchoix                
    Case 1
        MsgBox("Choix = 1")
    Case 3
        MsgBox("Choix = 3")
    Case 10
        MsgBox("Choix = 10")
    Case Else 'si aucune correspondance avec les choix proposés, alors exécuter le code dans le Else
        MsgBox("Choix autre que 1, 3 ou 10")
End Select 'fin de sélection ; une fois le code du Case effectué, le programme continu après cette ligne

Voici le code complet pour tester dans Mach3

Code:
Sub main()
    
   Dim monchoixtxt As String 'une variable 'chaine de caractères'
   Dim monchoix As Long 'la variable qui contiendra la conversion en numérique de la chaine de caractères
   
   monchoixtxt = InputBox("Votre choix","","0") 'saisir une entrée utilisateur
   
   If monchoixtxt <>"" Then 's'assurer qu'il y a une réponse de donnée ; gestion du bouton Annuler
   
      monchoix = Val(monchoixtxt) 'conversion en numérique
   
      Select Case monchoix 'en fonction du contenu de la variable 'monchoix', exécuter le code du Case associé
      
         Case 1
            MsgBox("Choix = 1")
         Case 3
            MsgBox("Choix = 3")
         Case 10
            MsgBox("Choix = 10")
         Case Else 'si aucune correspondance avec les choix proposés, alors exécuter le code dans le Else
            MsgBox("Choix autre que 1, 3 ou 10")
      
      End Select 'fin de sélection ; une fois le code du Case effectué, le programme continu après cette ligne
   End If

End Sub


Concernant le choix disponible pour une instruction Case (un cas), il est possible d'utiliser une liste ou une plage de valeurs.

Par exemple, si un cas doit être appliqué si la variable vaut 11, 17 ou 34, on peut écrire:

Case 11, 17, 34

Si on veut un Case qui réagisse à une plage de valeurs, par exemple entre 100 et 110 (les deux compris), on peut écrire:

Case 100 To 110

On peut également faire un test inférieur ou supérieur à une valeur

Case < 6 ' si la valeur de la variable test est < à 6 le choix sera validé

Un exemple complet

Code:
Sub main()
    
   Dim monchoixtxt As String 'une variable 'chaine de caractères'
   Dim monchoix As Long 'la variable qui contiendra la conversion en numérique de la chaine de caractères
   
   monchoixtxt = InputBox("Votre choix","","0") 'saisir une entrée utilisateur
   
   If monchoixtxt <>"" Then 's'assurer qu'il y a une réponse de donnée ; gestion du bouton Annuler
   
      monchoix = Val(monchoixtxt) 'conversion en numérique
   
      Select Case monchoix 'en fonction du contenu de la variable 'monchoix', exécuter le code du Case associé
      
         Case < 6
            MsgBox("Choix < 6")
         Case 6
            MsgBox("Choix = 6")
         Case 8
            MsgBox("Choix = 8")
         Case 10
            MsgBox("Choix = 10")
         Case 11,17,34
            MsgBox("Choix = 11, 17 ou 34")
         Case 100 To 110
            MsgBox("Choix entre 100 et 110")

         Case Else 'si aucune correspondance avec les choix proposés, alors exécuter le code dans le Else
            MsgBox("autre choix")
      
      End Select 'fin de sélection ; une fois le code du Case effectué, le programme continu après cette ligne
   End If

End Sub

Attention, si des choix correspondent à deux Case distincts, c'est le premier qui sera exécuté.

Exemple

Select Case monchoix
              Case < 6
                            MsgBox("Choix < 6")
              Case 5
                            MsgBox("Choix = 5")
              Case Else
                             MsgBox("autre choix")
End Select
 
Dans ce cas, une valeur de 5 retournera toujours 'Choix < 6'

Si par contre on écrit ça:

Select Case monchoix
              Case 5
                            MsgBox("Choix = 5")
              Case < 6
                            MsgBox("Choix < 6")
              Case Else
                            MsgBox("autre choix")
End Select

alors le choix 5 renverra bien 'Choix = 5'

Bien entendu, on n'est pas limité à une seule ligne de code dans un Case comme ici avec le MsgBox(); tout le code compris entre un Case et le suivant sera exécuté.

Il est bien sûr également possible de tester une variable de type 'chaine de caractère' (string) ; dans ce cas il ne faudra pas oublier de mettre la valeur de test entre double cote pour signifier qu'il s'agit d'une chaine.

Exemple

Dim monchoixtxt As String
    
monchoixtxt = InputBox("Votre choix","","")
    
Select Case monchoixtxt
        Case "MB"
            MsgBox("Choix = MB")
        Case "outil"
            MsgBox("Choix = outil")
        Case Else
            MsgBox("autre choix")
End Select


Notez que ce n'est pas sensible à la casse, donc si vous entrez mb, Mb,mB ou MB, c'est pareil, vous obtiendrez la réponse 'Choix = MB'

On peut aussi utiliser une liste de valeurs pour un case, par exemple:

Case "MB", "Forum"

Code:
Sub main()
    
   Dim monchoixtxt As String
   
   monchoixtxt = InputBox("Votre choix","","")
   
   Select Case monchoixtxt
      Case "MB", "Forum"
         MsgBox("Choix = MB ou Forum")
      Case "outil"
         MsgBox("Choix = outil")
      Case Else
         MsgBox("autre choix")
   End Select

End Sub

Bonne lecture et expérimentations

++
David

_________________
Traduction Française de CamBam et de sa documentation.
dh42
dh42
Admin
Admin

Messages : 20726
Points : 33433
Date d'inscription : 21/06/2009
Age : 57
Localisation : Près de St Etienne (42)

http://dh42.free.fr/

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum