Script per copiare il codice del file di script in un file di testo e quindi poterlo leggereCiao gruppo di utenti!
Avevo una domanda su come creare uno script che 1: eseguisse un ciclo in una cartella contenente un gruppo di script, copiasse il nome del file di script e poi copiasse lo script stesso sotto il nome in un file di testo e continuasse a concatenare il file di testo con tutti gli script della cartella 2: fosse in grado di leggere il testo dal file di testo e creare nuovi file di script in una cartella scelta. Posso creare l'interfaccia utente per scegliere cosa fare (salvare o leggere) e selezionare le cartelle senza problemi, ma non sono sicuro di come salvare il nome del file e lo script nel file di testo o leggerlo.
Ad esempio, il file di testo che avrebbe creato apparirebbe così:
sceneggiatura uno
i nomi predefiniti sono qui(1);
dt1=tabella dati corrente();
sceneggiatura due
i nomi predefiniti sono qui(1);
dt2=tabella dati corrente();
sceneggiatura 3
i nomi predefiniti sono qui(1);
dt3=tabella dati corrente();
e una volta letto, avrebbe prodotto tre file di script, ciascuno contenente il codice presente nel nome del file nel file di testo.
Ogni suggerimento sarà apprezzato.
Automazione e scriptingRe: Script per copiare il codice del file script in un file di testo e quindi poterlo leggereC'è un motivo specifico per cui combinare gli script in questo modo invece di usare Include?
Creare il file di testo è semplice, di seguito è riportato un esempio
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"));
Ma creare i file di script potrebbe non essere così semplice. Come si fa a distinguere tra JSL e nome del file? Avete nomi di file molto specifici?
Re: Script per copiare il codice del file script in un file di testo e quindi poterlo leggereGrazie @jthi , ha funzionato davvero bene!
Ho cambiato l'inizio di un file con un testo più distinto di "//##", quindi ora il file di testo appare così
//##etichetta script.jsl
//rev 5-9-25
i nomi predefiniti sono qui(1);
dt=tabella dati corrente();
righe_selezionate=dt<
//##Crea un PDF di una tabella dati.jsl
ecc...
Ora saprei che //## segnala l'inizio di un nuovo file di script e che il nome del file si trova tra //## e .jsl. Saprei anche che tra .jsl e il successivo //## c'è il testo dello script. Quindi sembra che tutti gli identificatori siano presenti, mi chiedevo solo se ci fosse un modo in JSL per leggere il codice in questo modo che possa sfruttare questi identificatori per ricostruire i file o se dovrei eseguire quella parte in un programma diverso.
Grazie per ogni ulteriore suggerimento!
Re: Script per copiare il codice del file script in un file di testo e quindi poterlo leggereQuesto non differisce molto dall'analisi del testo e si può fare facilmente con JSL. Se ipotizziamo di aver combinato file in questo modo
//##label script.jsl
//rev 5-9-25
names default to here(1);
dt=current datatable();
selected_rows=dt<
<GET selected="" rows=""></GET>
<P>e dovrebbe essere separato in etichetta script.jsl e Crea un PDF di una tabella dati.jsl, farei qualcosa del genere</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();
Tieni presente che questo eliminerà le modifiche di riga non necessarie dai tuoi dati, a causa del funzionamento di Words. Se desideri mantenerle, puoi eseguire un ciclo sul testo usando Contains e Substr o qualcosa di simile.
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);
);