Skript zum Kopieren des Skriptdateicodes in eine Textdatei und anschließendes AuslesenHallo Benutzergruppe!
Ich hatte eine Frage zum Erstellen eines Skripts, das 1. einen Ordner mit mehreren Skripten durchläuft, den Namen der Skriptdatei kopiert und anschließend das Skript selbst unterhalb des Namens in eine Textdatei kopiert und diese mit allen Skripten aus dem Ordner verknüpft. 2. Text aus der Textdatei einlesen und neue Skriptdateien in einem ausgewählten Ordner erstellen kann. Ich kann die Benutzeroberfläche erstellen, um auszuwählen, was zu tun ist (Speichern oder Einlesen), und die Ordner problemlos auswählen, bin mir aber nicht sicher, wie ich den Dateinamen und das Skript in der Textdatei speichern oder einlesen kann.
Die erstellte Textdatei würde beispielsweise folgendermaßen aussehen:
Skript eins
Namen werden standardmäßig hier(1) verwendet;
dt1=aktuelle Datentabelle();
Skript zwei
Namen werden standardmäßig hier(1) verwendet;
dt2=aktuelle Datentabelle();
Skript 3
Namen werden standardmäßig hier(1) verwendet;
dt3=aktuelle Datentabelle();
und beim Lesen würden drei Skriptdateien ausgegeben, die jeweils den Code enthalten, der sich unter dem Dateinamen in der Textdatei befand.
Ich bin für alle Vorschläge dankbar.
Automatisierung und SkriptingBetreff: Skript zum Kopieren von Skriptdateicode in eine Textdatei und anschließendes AuslesenGibt es einen bestimmten Grund, die Skripte auf diese Weise zu kombinieren, anstatt Include zu verwenden?
Das Erstellen der Textdatei ist einfach, unten sehen Sie ein Beispiel
Names Default To Here(1);
path = "folder/";
path = Convert File Path(path, "windows");
scriptfiles = Files In Directory(path);
scripts = {};
For Each({filename}, scriptfiles,
If(!Ends With(filename, ".jsl"),
continue();
);
Insert Into(scripts, "//" || filename);
Insert Into(scripts, Load Text File(path || filename));
);
txt = Concat Items(scripts, "\!N");
Save Text File(path || "total.jsl", txt, mode("replace"));
Das Erstellen der Skriptdateien ist jedoch möglicherweise nicht so einfach. Wie unterscheiden Sie zwischen JSL und Dateinamen? Haben Sie sehr spezifische Dateinamen?
Betreff: Skript zum Kopieren von Skriptdateicode in eine Textdatei und anschließendes AuslesenDanke @jthi , das hat ziemlich gut funktioniert!
Ich habe den Anfang einer Datei in einen deutlicheren Text von "//##" geändert, sodass die Textdatei jetzt so aussieht
//##Beschriftungsskript.jsl
//rev 5-9-25
Namen werden standardmäßig hier(1) verwendet;
dt=aktuelle Datentabelle();
ausgewählte_Zeilen=dt<
//##Erstellen Sie ein PDF aus einer Datentabelle.jsl
usw......
Jetzt wüsste ich, dass //## den Beginn einer neuen Skriptdatei signalisiert und dass der Dateiname zwischen //## und .jsl liegt. Außerdem wüsste ich, dass zwischen .jsl und dem nächsten //## der Skripttext steht. Es sieht also so aus, als wären alle Bezeichner vorhanden. Ich frage mich nur, ob es in JSL eine Möglichkeit gibt, den Code auf diese Weise zu lesen und diese Bezeichner zur Rekonstruktion der Dateien zu nutzen, oder ob ich diesen Teil in einem anderen Programm erledigen müsste.
Vielen Dank für weitere Gedanken!
Betreff: Skript zum Kopieren von Skriptdateicode in eine Textdatei und anschließendes AuslesenDies unterscheidet sich nicht wirklich vom Textparsing und lässt sich ganz einfach mit JSL durchführen. Wenn wir davon ausgehen, dass wir eine Datei wie diese kombiniert haben
//##label script.jsl
//rev 5-9-25
names default to here(1);
dt=current datatable();
selected_rows=dt<
<GET selected="" rows=""></GET>
<P>und es sollte in label script.jsl und Make a PDF of a data table.jsl aufgeteilt werden, ich würde so etwas machen</P> <CODE class=" language-jsl">Names Default To Here(1);
path = "$DOWNLOADS/comb_script.jsl";
save_path = "$DOWNLOADS/";
separator = "//##";
txt = Load Text File(path);
lines = Words(txt, "\!N");
aa_scripts = Associative Array();
cur_filename = "";
For Each({line}, lines,
If(Starts With(line, separator), // new file
filename = Substitute(line, separator, "");
cur_filename = filename;
aa_scripts[cur_filename] = {};
,
Insert Into(aa_scripts[cur_filename], line);
);
);
For Each({{filename, script_lines}}, aa_scripts,
script_txt = Concat Items(script_lines, "\!N");
Save Text File(save_path || filename, script_txt);
);
Write();
Beachten Sie, dass dadurch aufgrund der Funktionsweise von Word zusätzliche Zeilenänderungen aus Ihren Daten entfernt werden. Wenn Sie diese beibehalten möchten, können Sie den Text mit Contains und Substr oder einer ähnlichen Funktion durchlaufen.
Names Default To Here(1);
path = "$DOWNLOADS/comb_script.jsl";
save_path = "$DOWNLOADS/";
separator = "//##";
txt = Load Text File(path);
While(Length(txt) > 0,
separator_start = Contains(txt, separator);
separator_end = Contains(txt, separator, separator_start + 1);
If(separator_end == 0,
separator_end = Length(txt) + 1;
);
cur_script = Remove From(txt, 1, separator_end - separator_start);
cur_filename = Remove From(cur_script, 1, Contains(cur_script, "\!N") - 1);
cur_script = Trim Whitespace(cur_script);
filename = Substitute Into(cur_filename, separator, "");
Save Text File(save_path || cur_filename, cur_script);
);