Programmation Basic Script sous Mach3
4 participants
Page 1 sur 1
Programmation Basic Script sous Mach3
Salut
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:
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é .. 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
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
Menu
Branchements conditionnels - If/Then/Else
Branchements conditionnels - Select/Case
++
David
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é .. 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
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.
Re: Programmation Basic Script sous Mach3
salut david
variables ok ! ( j'ai fait ma petite fiche pense bête )
variables ok ! ( j'ai fait ma petite fiche pense bête )
jp1973- posteur Régulier
- Messages : 181
Points : 193
Date d'inscription : 26/10/2020
Age : 51
Localisation : 46
Re: Programmation Basic Script sous Mach3
Ok, la suite tout à l'heure
++
David
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: Programmation Basic Script sous Mach3
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.
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
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.
Re: Programmation Basic Script sous Mach3
ok ça va , je suis .......faut dire qu'un développement clair y est pour beaucoup...
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
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
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
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
jp1973- posteur Régulier
- Messages : 181
Points : 193
Date d'inscription : 26/10/2020
Age : 51
Localisation : 46
Re: Programmation Basic Script sous Mach3
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
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
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.
Re: Programmation Basic Script sous Mach3
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- Admin
- Messages : 14932
Points : 21889
Date d'inscription : 13/05/2011
Localisation : Aubagne
Re: Programmation Basic Script sous Mach3
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 ?
jp1973- posteur Régulier
- Messages : 181
Points : 193
Date d'inscription : 26/10/2020
Age : 51
Localisation : 46
Re: Programmation Basic Script sous Mach3
salut,
Exact
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.
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
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
Ca sent le "case" tout ça !
Exact
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.
Re: Programmation Basic Script sous Mach3
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
jp1973- posteur Régulier
- Messages : 181
Points : 193
Date d'inscription : 26/10/2020
Age : 51
Localisation : 46
Re: Programmation Basic Script sous Mach3
1 octets =8 bytes
Non, 1 Octet = 8 Bits
Byte = Octet en Anglais (1 Byte = 8 Bits)
PS regarde page 8 de la doc pour la liste complète des types de données du Basic Cypress
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: Programmation Basic Script sous Mach3
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
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.
Re: Programmation Basic Script sous Mach3
bonjour David et meles .
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 ) ?
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- posteur Régulier
- Messages : 181
Points : 193
Date d'inscription : 26/10/2020
Age : 51
Localisation : 46
Re: Programmation Basic Script sous Mach3
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
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.
Re: Programmation Basic Script sous Mach3
salut ,
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 .
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- posteur Régulier
- Messages : 181
Points : 193
Date d'inscription : 26/10/2020
Age : 51
Localisation : 46
Re: Programmation Basic Script sous Mach3
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
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.
Re: Programmation Basic Script sous Mach3
salut david
là ça va ...
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 ..
là çà va ....
là c'est oui /ouais , en fait c'est le " peuvent " qui me déroute ...
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 ....
.......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 ....
jp1973- posteur Régulier
- Messages : 181
Points : 193
Date d'inscription : 26/10/2020
Age : 51
Localisation : 46
Re: Programmation Basic Script sous Mach3
La compréhension viendra au fur et à mesure que l'on avancera dans le tuto ; il ne faut pas bruler les étapes .. pour l'instant on n'en est pas encore aux fonctions/sub ...
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"
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
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.
Re: Programmation Basic Script sous Mach3
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
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- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: Programmation Basic Script sous Mach3
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)
Non, c'est plus une question "d’esthétique" pour le programmeur.
... et tu n'a pas à t'excuser, le sujet est ouvert à tous
++
David
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
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: Programmation VB Script sous Mach3
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
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- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: Programmation Basic Script sous Mach3
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.
Il y a bien longtemps que l'on n'utilise plus les n° de ligne en programmation en Basic ... 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
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 ... 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.
Re: Programmation VB Script sous Mach3
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
comme on dit " Fia lux" que la lumière soit
une fois de plus c est clair et limpide
Mille Merci
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: Programmation Basic Script sous Mach3
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
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
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"
Bonne lecture et expérimentations
++
David
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.
Re: Programmation Basic Script sous Mach3
Salut,
Juste pour centraliser un peu les infos.
Les boites de message et messages dans la barre de status
http://www.metabricoleur.com/t24652-affichage-d-une-variable-dans-message#475125
++
David
Juste pour centraliser un peu les infos.
Les boites de message et messages dans la barre de status
http://www.metabricoleur.com/t24652-affichage-d-une-variable-dans-message#475125
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Sujets similaires
» Basic Script - Outil contenu dans poche ?
» Mach3 programmation
» VB SCRIPT APPEL UNE PAGE MACH3
» recherche script de palpage pour MACH3
» Bug sur axe X sous Mach3
» Mach3 programmation
» VB SCRIPT APPEL UNE PAGE MACH3
» recherche script de palpage pour MACH3
» Bug sur axe X sous Mach3
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum