Loop sui file di scriptCari script jsl,
Ho uno script in cui utilizzo l'istruzione include per chiamare un pedice per "reporting" (inserendo un grafico JMP in un file PowerPoint):
dt = Current Data Table();
Include( strRootPathScript || str_report_Product1) );
Funziona bene finché uso 1 prodotto. Il mio desiderio è quello di eseguire il ciclo su un elenco di prodotti [Prodotto1;Prodotto2;...]
e per sostituire il nome del prodotto nell'istruzione di inclusione.
Dopo alcune prove esotiche intorno alle istruzioni EVAL/EXPR/SOSTITUTO, chiedo il tuo aiuto!
Grazie!!!
Girolamo
ScriptingRe: Loop su file di scriptCiao @J_Bonnouvrier1 ,
È un po 'difficile generalizzare questo per funzionare in qualsiasi circostanza, ma potresti eseguirlo in loop data una struttura di codice/file come la immagino.
Supponendo che tu conosca in anticipo le sostituzioni Prodotto1, Prodotto2, ecc. Nel tuo codice JSL, se fai qualcosa del tipo:
dt = Current Data Table();
For(i=1, i<=NItems(Product_List), i++,
Include(strRootPathScript||"str_report_"||Product_List[i]);
);
In questo caso, la variabile Product_List sarebbe un elenco dei tuoi prodotti: Product_List={"Prodotto1", "Prodotto2", "Prodotto3",...};. Nel ciclo For, quando chiama Product_List[i], concatenerà l'i-esimo elemento di Product_List. Quindi, se i = 3, dovrebbe fare quanto segue:
Include(strRootPathScript||str_report_||Product_List[3]) , dove presumo che strRootPathScript sia un percorso radice, come "C:\myfiles\JSL_code\", in modo che l'argomento che stai inserendo nella funzione Include questo caso è: "C:\myfiles\JSL_code\str_report_Product3".
È questo che cerchi?
Spero questo sia di aiuto!,
DS
Re: Loop su file di scriptCiao @SDF1 ,
In realtà ho dimenticato di dire che str_report_Product1 è una variabile che dà il nome del file per ogni prodotto:
str_report_Product1 = "C:\temp\report_Product1.jsl"
Quindi, la soluzione che proponi non viene riconosciuta dallo script.
Grazie e saluti,
Girolamo
Re: Ciclo sui file di scriptCiao @J_Bonnouvrier1 ,
In tal caso, tutto ciò che devi fare è assicurarti che il tuo percorso di directory sia definito correttamente (con l'ultima barra rovesciata inclusa) e che devi concatenare la fine ".jsl" per assicurarti che le cose funzionino come previsto.
Ad esempio, ho creato tre file Product JSL, ciascuno con i seguenti comandi, ma cambiando semplicemente i numeri da 1, a 2 e poi 3:
Names Default to Here (1);
Print("This is Product 1 JSL script");Il file JSL principale è il seguente:
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");
);L'output dell'esecuzione del codice principale sopra è:
"Questa è la sceneggiatura principale"
"Questo è lo script JSL del prodotto 1"
"Questo è lo script JSL del prodotto 2"
"Questo è lo script JSL del prodotto 3"
Funzionerà anche se hai ".jsl" come parte dell'elenco dei prodotti, come: Product_List=""Product1.jsl", "Product2.jsl",...}; e quindi rimuoveresti la concatenazione ||.jsl" dal ciclo For. In ogni caso, ottieni lo stesso output di cui sopra. Dipende solo da come vuoi definire l'elenco Product_List.
Spero questo sia di aiuto!,
ds