Myriad Forum « Run() pas lancé dans function ?? »
 Welcome, Guest.
 You can read all messages, but to be able to post,
 please Login or Register.
Mar 30th, 2020, 4:06pm 
   Myriad Forum
   MyrScript Language
(Moderator: Forum Administrator)
   Run() pas lancé dans function ??
« Previous topic | Next topic »
Pages: 1 2  Reply | Notify of replies | Print
   Author  Topic: Run() pas lancé dans function ??  (Read 561 times)
az
Board Full Member
***





   
WWW |

Posts: 211
Run() pas lancé dans function ??  
« on: Dec 20th, 2019, 7:41pm »
Quote | Modify

Bonjour,
 
J'ai un script qui en appelle un autre par Run(). Extrait du dialogue :
 
  Code:
-- si choix d'un répertoire
 if Dialog_Folder.Value==true then
  folderName="C:/Documents and Settings/az/Mes documents/Sons/"
  folderName=GetFolderName()
  if (folderName~=nil) then
   print(folderName)
   -- We process the folder for .myr files
   BrowseFolder(folderName,"*.myr",MyCallBackFunction,subFolder)
  end
 else
  myScore=FrontScore()
  appel=true
  Run("MesNuances1Score.mys")
  appel=false
 end

 
 
Ce Run() ci-dessus marche très bien. Mais le 2ème est via la fonction MyCallBackFunction :
 
Code:
--- This Function process all .myr file in a folder and its subfolders
--- Callback function declaration
function MyCallBackFunction(fileName)
 -- The score is loaded in memory
 myScore=Load(fileName,false,false,true,false,true,false,false)
 appel=true
 Run("MesNuances1Score.mys")
 appel=false
 myScore.Dispose()
 return true
end

 
myScore est effectivement chargé, mais sur la ligne Run() rien ne se passe, le script n'est pas appelé, et aucune erreur dans la log !
 
Qu'est-ce qui peut empêcher d'utiliser Run() dans une fonction ? Quelqu'un a une idée ???
 
Merci !
offline
Geo
Board Master
*****





   


Gender: male
Posts: 2129
Re: Run() pas lancé dans function ??  
« Reply #1 on: Dec 20th, 2019, 10:34pm »
Quote | Modify

Bonsoir
J'essaie une réponse assez généraliste.
Écrit comme ça, le mys doit être dans le même dossier que le script appelant ou dans le dossier Includes.
 
Run retourne un code indiquant si le lancement a été réussi.
"Return value : Boolean : true if the script has been launched."
Selon les versions le code retour est fiable ou non.
 
Votre Partition est chargée, est-elle déchargée ensuite ?
Sinon ce serait signe d'un plantage dans le SP appelé par Run.
Il faut savoir que dnas ceratins cas le sp appelé est exécuté deux fois, il est donc prudent de mettre un exit() en dernière ligne.
 
Peut-être que les fonctions callback sont particulières ?
 
Dans les cas délicats, j’exécute le code après avoir ouvert tous les module et placé des points d'arrêts.
offline
az
Board Full Member
***





   
WWW |

Posts: 211
Re: Run() pas lancé dans function ??  
« Reply #2 on: Dec 21st, 2019, 10:54am »
Quote | Modify

Merci Geo !
 
Qu'appelles-tu SP ? Et où mettrais-tu un Exit ? À la fin du script appelé ? Je ne connais Exit que dans les dialogues.
 
Après de nouveaux tests, je pense qu'effectivement tout ne marche pas pareil dans une MyCallBackFunction appelée par BrowseFolder.
 
Manifestement :
 
1) Le script appelé par Run() ne doit pas être dans le même dossier monScript.mys que le script appelant (script principal du dossier). Ce doit être un script indépendant, sinon Run() ne le trouve pas et ne fait rien.
(Ou alors il faudrait le mettre en Include, et en ce cas sans doute l'appeler non par Run() mais par sa fonction...?)
 
2) Les variables globales définies dans MyCallBackFunction ne semblent malheureusement pas accessibles au script appelé par Run().
 
Donc dans mon cas, le seul moyen de m'en sortir est d'ouvrir chaque partition en FrontScore, et qu'un script indépendant appelé traite juste le frontscore (avec un "dispose" au retour).
 
Merci !
offline
Geo
Board Master
*****





   


Gender: male
Posts: 2129
Re: Run() pas lancé dans function ??  
« Reply #3 on: Dec 21st, 2019, 6:53pm »
Quote | Modify

Excusez-moi pour le vocabulaire , voici la traduction :
PP : programme principal, le script qui est lancé au départ.
SP : sous programme, script lancé par une autre script.
 
Un SP est lancé par un Run placé dans le programme principal ou dans un sous-programme, en général pour faire une action bien définie, comme par exemple normaliser les marges.
 
Il y a des scripts qui se rééxécutent sans que ce soir prévu, la solution de contournement est de mettre une ligne :
exit()  
à la fin (en minuscules).
Quand c'est le script principal, il s'arrête.
Quand c'est une sous-programme il revient au script appelant, comme c'est normalement le cas.
C'est juste une rustine.
 
Autant que je sache, le fait que le SP (excusez-moi de réemployer ce terme, il évite toute ambiguïté) soit dans le dossiers Includes ou le même dossier que le script appelant ne change rien à l'appel ou au fonctionnement. Du moins il ne devrait pas. J'utilise Includes par confort, cela évite d'avoir des listes de scripts interminables dans l'interface de HA.
PAr contre c'est un peu plus difficile pour les modifier, donc je procède ainsi :
Je mets le script (SP) dans le dossier Settings/Scripts, et quand il est au point, je le transfère dans Includes.
J'ai une cinquantaine de sous-programmes comme ça.
 
Autre chose, les scripts sont éditables avec NotePad++. Il faut indiquer comme langage : LUA.
 
Je vais regarder si j'ai fait un script de balayage des partitions d'un dossier.
 
 
 
 
offline
Geo
Board Master
*****





   


Gender: male
Posts: 2129
Re: Run() pas lancé dans function ??  
« Reply #4 on: Dec 21st, 2019, 8:06pm »
Quote | Modify

Dans la doc Myrscript il est dit :
The launched script will share its global variables and functions.
je ne sais pas le traduire exactement.
 
Il est question plus loin d' " installed scripts.", je n'ai pas retrouvé de définition mais dans la Function Include, il est indiqué que si le  
 script n'est pas trouvé, il est pris dans le dossier Includes.
 
D'ailleurs, c'est une autre manière de faire : défiinir une function, éventuellment avec des paramètres et l'insérer à la demande dans le code par une commande Include.
offline
bubu42
Board Master
*****





   


Gender: male
Posts: 9630
Re: Run() pas lancé dans function ??  
« Reply #5 on: Dec 21st, 2019, 11:20pm »
Quote | Modify

on Dec 21st, 2019, 8:06pm, Geo wrote:
Dans la doc Myrscript il est dit :
The launched script will share its global variables and functions.
je ne sais pas le traduire exactement.
Le script lancé va partager ses variables globales et ses fonctions.
offline

Harmony Assistant - Ubuntu + Wine et Windows XP sur machine virtuelle. VS, OMeR, PDF2M
Geo
Board Master
*****





   


Gender: male
Posts: 2129
Re: Run() pas lancé dans function ??  
« Reply #6 on: Dec 21st, 2019, 11:27pm »
Quote | Modify

Merci Bubu
 
Je ne comprends quand même pas la signification exacte de cette phrase.
Le script lancé en deuxième temps utilise les données globales du script lanceur ? ou c'est vrai dans les deux sens ?
offline
Andre_B
Board Master
*****





   
Email

Gender: male
Posts: 1380
Re: Run() pas lancé dans function ??  
« Reply #7 on: Dec 22nd, 2019, 8:24am »
Quote | Modify

Le sens restrictif c'est que le script lancé partage ses variables globales avec le script appelant, donc permet à ce dernier d'utiliser le résultat de son travail.  
 
Mais je crois plutôt que ce seraient les deux scripts (et tous les autres qui s'appellent l'un l'autre) qui se partagent le même ensemble de variables globales. Ce qui est cohérent avec l'ensemble des fonctions d'un script.  
 
Mais rien ne vaut un essai pour en avoir le c½ur net.
Logged

André Baeck, Belge vivant dans le Gard
Windows 10, HA 991C (et précédents)
bubu42
Board Master
*****





   


Gender: male
Posts: 9630
Re: Run() pas lancé dans function ??  
« Reply #8 on: Dec 22nd, 2019, 11:53am »
Quote | Modify

Je n'ai pas fait d'essai, faute de temps, mais je serais bien de l'avis d'André : le script appelé (child) rend bien ses variables globales disponibles au script appelant (mother). Et d'après les essais mentionnés plus haut, le script appelé récupère bien les variables globales de l'appelant. Cela dit, il me semble qu'il vaudrait mieux bien sécuriser l'ensemble avec un Include(), ne serait-ce que pour éliminer les problèmes avec les sous-dossiers.
offline

Harmony Assistant - Ubuntu + Wine et Windows XP sur machine virtuelle. VS, OMeR, PDF2M
Geo
Board Master
*****





   


Gender: male
Posts: 2129
Re: Run() pas lancé dans function ??  
« Reply #9 on: Dec 22nd, 2019, 10:37pm »
Quote | Modify

Merci pour vos explications.
Vous avez bien mérité de passer de bonnes fêtes.
offline
Geo
Board Master
*****





   


Gender: male
Posts: 2129
Re: Run() pas lancé dans function ??  
« Reply #10 on: Dec 22nd, 2019, 10:46pm »
Quote | Modify

Pour az
 
J'ai retrouvé un bout de code (qui marche) écrit pour effacer des fichiers d'un dossier.
Ca peut servir de base à ce que vous voulez faire.
 
La fonction callback n'a pour rôle que d'enrgistrer les noms des fichiers :
function MyCallBackBrowseFolder(fileName)
print(fileName)
listeFichiers[iFichiers] = fileName
iFichiers=iFichiers+1
return true
end
 
l'utilisation :
 
filtre = "texte du filtre"
dossier = exportPath -- par exmple
if(dossier~=nil) then
BrowseFolder(dossier,filtre,MyCallBackBrowseFolder,false)
 end
 print (iFichiers)
 if iFichiers > 0 then
 --Les effacer
  for index=0 , iFichiers-1 do
  errorStr=RemoveFile(listeFichiers[index])
  if(errorStr~=nil) then
   Message(errorStr)
   Tracer ("Effacement raté ".. listeFichiers[index])
  else
   Tracer ("Effacement effectif ".. listeFichiers[index])
  end
  --RemoveFile(dossier ..listeFichiers[index])
  end -- for
 end
end -- du nettoyage  
offline
Geo
Board Master
*****





   


Gender: male
Posts: 2129
Re: Run() pas lancé dans function ??  
« Reply #11 on: Dec 22nd, 2019, 10:55pm »
Quote | Modify

Pour az
 
J'ai retrouvé un bout de code (qui marche) écrit pour effacer des fichiers d'un dossier selon un filtrage sur les noms.
Ca peut servir de base à ce que vous voulez faire.
 
La fonction callback n'a pour rôle que d'enregistrer les noms des fichiers dans un tableau :
function MyCallBackBrowseFolder(fileName)
print(fileName)
listeFichiers[iFichiers] = fileName
iFichiers=iFichiers+1
return true
end
 
l'utilisation :
 
filtre = "texte du filtre"
dossier = exportPath -- par exemple
iFichiers = 0
if(dossier~=nil) then
  BrowseFolder(dossier,filtre,MyCallBackBrowseFolder,false)
end
print ("nb de fichiers : " .. iFichiers)  -- nombre de fichiers trouvés
if iFichiers > 0 then
  --Les traiter un par un
  for index=0 , iFichiers-1 do
  print ("fichier : ) .. listeFichiers[index])
  -- traitement du fichier
      -- ...
  end -- du for
end -- du  iFichiers > 0
 
offline
Andre_B
Board Master
*****





   
Email

Gender: male
Posts: 1380
Re: Run() pas lancé dans function ??  
« Reply #12 on: Jan 17th, 2020, 8:42am »
Quote | Modify

J'essaie dans un nouveau script (.mys) d'en appeler un autre par Run(xxx).  
 
Ce qui se passe dans le PP (je garde les codes de Geo), c'est que le SP est lancé, mais que le PP continue.  
 
Je voudrais que ce PP s'arrête le temps que le SP se termine.  
 
Dans mon cas de base, le SP est un .myf qui présente un dialogue dans lequel l'utilisateur doit cliquer sur un button "GO" pour qu'il se déroule (après avoir éventuellement modifié l'un ou l'autre des items)
 
J'ai essayé un "WaitDelay" dans le PP après le run, un "Message", mais cela ne fait que retarder le tout: le dialogue du SP s'affiche, mais n'est "actif" qu'après la fin du Wait ou la réponse au message.  
 
Y-aurait-il des suggestions de solution?
Logged

André Baeck, Belge vivant dans le Gard
Windows 10, HA 991C (et précédents)
bubu42
Board Master
*****





   


Gender: male
Posts: 9630
Re: Run() pas lancé dans function ??  
« Reply #13 on: Jan 17th, 2020, 9:35am »
Quote | Modify

Il faudrait donc que le programme principal se termine juste après l'appel du SP et que le SP le rappelle en fin de procédure, si possible avec un passage de variables. Chaque script devient à son tour PP, un peu comme le "goto" à la place du "gosub" dans un programme en BASIC.
offline

Harmony Assistant - Ubuntu + Wine et Windows XP sur machine virtuelle. VS, OMeR, PDF2M
Andre_B
Board Master
*****





   
Email

Gender: male
Posts: 1380
Re: Run() pas lancé dans function ??  
« Reply #14 on: Jan 17th, 2020, 9:55am »
Quote | Modify

Merci Bubu,  
 
Ouais, pas impossible. Il faudrait modifier le PP en conséquence, ce que je voudrais éviter ou limiter (jusqu'à présent, j'ai simplement mis un flag "Terminé" à la fin, dans le cadre d'un essai infructueux.
Logged

André Baeck, Belge vivant dans le Gard
Windows 10, HA 991C (et précédents)
Pages: 1 2  Reply | Notify of replies | Print

« Previous topic | Next topic »

« Myriad Forum » Powered by YaBB 1 Gold - SP 1.1!
YaBB © 2000-2002,
Xnull. All Rights Reserved.

Top of page
Legal information Last update:  (c) Myriad