Schleife bei SkriptdateienLiebe jsl-Skripter,
Ich habe ein Skript, in dem ich die Include-Anweisung verwende, um ein tiefgestelltes Skript für die "Berichterstellung" aufzurufen (ein JMP-Diagramm in eine PowerPoint-Datei einzufügen):
dt = Current Data Table();
Include( strRootPathScript || str_report_Product1) );
Es funktioniert gut, solange ich 1 Produkt verwende. Mein Wunsch ist es, eine Liste von Produkten zu durchlaufen [Product1;Product2;...]
und den Produktnamen in die Include-Anweisung zu ersetzen.
Nach einigen exotischen Versuchen rund um die EVAL/EXPR/SUBSTITUTE-Anweisungen bitte ich um Ihre Hilfe!
Vielen Dank!!!
Hieronymus
SkriptingRe: Schleife bei SkriptdateienHi @J_Bonnouvrier1 ,
Es ist ein wenig schwierig, dies zu verallgemeinern, um unter allen Umständen zu funktionieren, aber Sie könnten es bei einer Code- / Dateistruktur durchlaufen, wie ich es mir vorstelle.
Angenommen, Sie kennen die Ersetzungen Product1, Product2 usw. in Ihrem JSL-Code im Voraus, wenn Sie Folgendes tun:
dt = Current Data Table();
For(i=1, i<=NItems(Product_List), i++,
Include(strRootPathScript||"str_report_"||Product_List[i]);
);
In diesem Fall wäre die Variable Product_List eine Liste Ihrer Produkte: Product_List={"Product1", "Product2", "Product3",...};. Wenn die For-Schleife Product_List[i] aufruft, würde sie das i-te Element von Product_List verketten. Wenn also i = 3 ist, sollte es Folgendes tun:
Include(strRootPathScript||str_report_||Product_List[3]) , wobei ich annehme, dass strRootPathScript ein Root-Pfad ist, wie "C:\myfiles\JSL_code\", sodass das Argument, das Sie in die Include-Funktion eingeben, in in diesem Fall: "C:\myfiles\JSL_code\str_report_Product3".
Ist das so, was Sie suchen?
Hoffe das hilft!,
DS
Re: Schleife bei SkriptdateienHallo @SDF1 ,
Tatsächlich habe ich vergessen zu erwähnen, dass str_report_Product1 eine Variable ist, die den Namen der Datei für jedes Produkt angibt:
str_report_Product1 = "C:\temp\report_Product1.jsl"
Die von Ihnen vorgeschlagene Lösung wird also vom Skript nicht erkannt.
Danke und Grüße,
Jérôme
Betreff: Schleife auf SkriptdateienHallo @J_Bonnouvrier1 ,
In diesem Fall müssen Sie nur sicherstellen, dass Ihr Verzeichnispfad korrekt definiert ist (mit dem letzten umgekehrten Schrägstrich) und dass Sie die Endung ".jsl" verketten müssen, um sicherzustellen, dass die Dinge wie erwartet funktionieren.
Als Beispiel habe ich drei Produkt-JSL-Dateien erstellt, jede mit den folgenden Befehlen, aber nur die Zahlen von 1 auf 2 und dann auf 3 geändert:
Names Default to Here (1);
Print("This is Product 1 JSL script");Die Haupt-JSL-Datei lautet wie folgt:
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");
);Die Ausgabe des Ausführens des obigen Hauptcodes ist:
"Dies ist das Hauptskript"
„Das ist Produkt 1 JSL-Skript“
„Das ist Produkt 2 JSL-Skript“
„Das ist Produkt 3 JSL-Skript“
Es funktioniert auch, wenn Sie die ".jsl" als Teil der Produktliste haben, wie: Product_List={"Product1.jsl", "Product2.jsl",...}; und dann würden Sie die Verkettung ||.jsl" aus der For-Schleife entfernen. In jedem Fall erhalten Sie die gleiche Ausgabe wie oben. Es hängt nur davon ab, wie Sie die Product_List-Liste definieren möchten.
Hoffe das hilft!,
DS