Bucle en archivos de scriptEstimados scripters de jsl:
Tengo un script en el que uso la instrucción de inclusión para llamar a un subíndice para "informar" (insertando un gráfico JMP en un archivo de PowerPoint):
dt = Current Data Table();
Include( strRootPathScript || str_report_Product1) );
Funciona bien siempre que use 1 producto. Mi deseo es hacer un bucle en una lista de productos [Product1; Product2; ...]
y reemplazar el nombre del producto en la instrucción de inclusión.
Después de algunas pruebas exóticas en torno a las instrucciones EVAL / EXPR / SUBSTITUTE, ¡le pido su ayuda!
¡¡¡Gracias!!!
Jerome
ScriptingRe: bucle en archivos de scriptHola @ J_Bonnouvrier1 ,
Es un poco difícil generalizar esto para que funcione bajo cualquier circunstancia, pero podría recorrerlo con una estructura de código / archivo como lo imagino.
Suponiendo que conozca de antemano las sustituciones Producto1, Producto2, etc.en su código JSL, si hace algo como:
dt = Current Data Table();
For(i=1, i<=NItems(Product_List), i++,
Include(strRootPathScript||"str_report_"||Product_List[i]);
);
En este caso, la variable Product_List sería una lista de sus productos: Product_List = {"Product1", "Product2", "Product3", ...} ;. En el ciclo For, cuando llama a Product_List [i], estaría concatenando el i-ésimo elemento de Product_List. Entonces, si i = 3, debería hacer lo siguiente:
Incluya (strRootPathScript || str_report_ || Product_List [3]), donde supongo que strRootPathScript es una ruta raíz, como "C: \ myfiles \ JSL_code \", de modo que el argumento que está introduciendo en la función Incluir estaría en este caso es: "C: \ myfiles \ JSL_code \ str_report_Product3".
¿Es esto lo que buscas?
¡Espero que esto ayude!,
DS
Re: bucle en archivos de scriptHola @ SDF1 ,
De hecho, olvidé mencionar que str_report_Product1 es una variable que da el nombre del archivo para cada producto:
str_report_Product1 = "C: \ temp \ report_Product1.jsl"
Entonces, la solución que propones no es reconocida por el script.
Gracias y saludos,
Jérôme
Re: Bucle en archivos de scriptHola @J_Bonnouvrier1 ,
En ese caso, todo lo que necesita hacer es asegurarse de que la ruta de su directorio esté definida correctamente (con la última barra invertida incluida) y que necesita concatenar el final ".jsl" para asegurarse de que todo funcione como se espera.
Como ejemplo, creé tres archivos JSL de productos, cada uno con los siguientes comandos, pero simplemente cambiando los números de 1 a 2 y luego a 3:
Names Default to Here (1);
Print("This is Product 1 JSL script");El archivo JSL principal es el siguiente:
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");
);El resultado de ejecutar el código principal anterior es:
"Este es el guión principal"
"Este es el script JSL del Producto 1"
"Este es el script JSL del Producto 2"
"Este es el script JSL del Producto 3"
También funcionará si tiene el ".jsl" como parte de la lista de productos, como: Product_List={"Product1.jsl", "Product2.jsl",...}; y luego eliminaría la concatenación ||".jsl" del ciclo For. De cualquier manera, obtienes el mismo resultado que el anterior. Solo depende de cómo desee definir la lista Product_List.
¡Espero que esto ayude!,
SD