Boucle sur les fichiers de scriptChers scripteurs jsl,
J'ai un script dans lequel j'utilise l'instruction include pour appeler un indice pour "reporting" (insertion d'un graphique JMP dans un fichier powerpoint):
dt = Current Data Table();
Include( strRootPathScript || str_report_Product1) );
Cela fonctionne bien tant que j'utilise 1 produit. Mon souhait est de boucler sur une liste de produits [Product1;Product2;...]
et pour remplacer le nom du produit dans l'instruction include.
Après quelques essais exotiques autour des instructions EVAL/EXPR/SUBSTITUTE, j'implore votre aide !
Merci!!!
Jérôme
Automatisation et scriptOrganisation du contenuRe : Boucle sur les fichiers de scriptSalut @J_Bonnouvrier1 ,
Dans ce cas, tout ce que vous avez à faire est de vous assurer que votre chemin de répertoire est correctement défini (avec la dernière barre oblique inverse incluse) et que vous devez concaténer la terminaison ".jsl" pour vous assurer que tout fonctionne comme prévu.
À titre d'exemple, j'ai créé trois fichiers Product JSL, chacun avec les commandes suivantes, mais en changeant simplement les nombres de 1 à 2, puis à 3 :
Names Default to Here (1);
Print("This is Product 1 JSL script");Le fichier JSL principal est le suivant :
Names Default to Here (1);
Product_List={"Product1", "Product2", "Product3"};
ScriptDir = "C:\temp\"; //Or whatever your path is.
Print("This is the main script");
For(i=1, i<=NItems(Product_List), i++,
Include(ScriptDir||Product_List[i]||".jsl");
);La sortie de l'exécution du code principal ci-dessus est :
"C'est le scénario principal"
"Ceci est le script JSL du produit 1"
"Ceci est le script JSL du produit 2"
"Ceci est le script JSL du produit 3"
Cela fonctionnera également si vous avez le ".jsl" dans la liste de produits, comme : Product_List={"Product1.jsl", "Product2.jsl",...} ; puis vous supprimeriez la concaténation ||".jsl" de la boucle For. Dans tous les cas, vous obtenez le même résultat que ci-dessus. Cela dépend simplement de la façon dont vous souhaitez définir la liste Product_List.
J'espère que cela t'aides!,
DS
Re : Boucle sur les fichiers de scriptSalut @SDF1 ,
En fait j'ai oublié de préciser que str_report_Product1 est une variable donnant le nom du fichier pour chaque produit :
str_report_Product1 = "C:\temp\report_Product1.jsl"
Ainsi, la solution que vous proposez n'est pas reconnue par le script.
Merci et salutations,
Jérôme
Re : Boucle sur les fichiers de scriptSalut @J_Bonnouvrier1 ,
Il est un peu difficile de généraliser cela pour fonctionner en toutes circonstances, mais vous pouvez le parcourir en boucle étant donné une structure de code/fichier telle que je l'imagine.
En supposant que vous connaissiez à l'avance les substitutions Produit1, Produit2, etc. Dans votre code JSL, si vous faites quelque chose comme :
dt = Current Data Table();
For(i=1, i<=NItems(Product_List), i++,
Include(strRootPathScript||"str_report_"||Product_List[i]);
);
Dans ce cas, la variable Product_List serait une liste de vos produits : Product_List={"Product1", "Product2", "Product3",...} ;. Dans la boucle For, lorsqu'elle appelle Product_List[i], elle concatène le ième élément de Product_List. Donc, si i = 3, il devrait faire ce qui suit :
Include(strRootPathScript||str_report_||Product_List[3]) , où je suppose que strRootPathScript est un chemin racine, comme "C:\myfiles\JSL_code\", de sorte que l'argument que vous alimentez dans la fonction Include serait dans ce cas soit : "C:\myfiles\JSL_code\str_report_Product3".
C'est ce genre de choses que vous recherchez ?
J'espère que cela t'aides!,
DS