Script pour copier le code du fichier de script dans un fichier texte et pouvoir ensuite le lireSalut groupe d'utilisateurs !
J'avais une question sur la façon de créer un script qui 1 : parcourrait un dossier contenant un tas de scripts, copierait le nom du fichier de script, puis copierait le script lui-même sous le nom dans un fichier texte et continuerait à concaténer le fichier texte avec tous les scripts du dossier ; 2 : serait capable de lire le texte du fichier texte et de créer de nouveaux fichiers de script dans un dossier choisi. Je peux créer le côté interface utilisateur pour choisir quoi faire (enregistrer ou lire) et sélectionner les dossiers sans problème, mais je ne sais pas comment enregistrer le nom du fichier et le script dans le fichier texte ou le lire.
Ainsi, par exemple, le fichier texte qu'il aurait créé ressemblerait à ceci :
scénario un
les noms par défaut sont ici(1);
dt1=table de données actuelle();
scénario deux
les noms par défaut sont ici(1);
dt2=table de données actuelle();
scénario 3
les noms par défaut sont ici(1);
dt3=tableau de données actuel();
et lors de la lecture, il produirait trois fichiers de script contenant chacun le code qui se trouvait sous le nom de fichier dans le fichier texte.
Toute suggestion serait appréciée.
Automatisation et scriptsRe: Script pour copier le code du fichier script dans un fichier texte et pouvoir ensuite le lireExiste-t-il une raison spécifique pour combiner les scripts comme ceci au lieu d'utiliser Include ?
La création du fichier texte est simple, voici un exemple ci-dessous
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"));
Mais créer des fichiers de script n'est peut-être pas aussi simple. Comment différencier JSL et le nom du fichier ? Avez-vous des noms de fichiers très spécifiques ?
Re: Script pour copier le code du fichier script dans un fichier texte et pouvoir ensuite le lireMerci @jthi , ça a plutôt bien fonctionné !
J'ai changé le début d'un fichier en un texte plus distinct de "//##" donc maintenant le fichier texte ressemble à ceci
//##script d'étiquette.jsl
//rév 5-9-25
les noms par défaut sont ici(1);
dt=table de données actuelle();
lignes_sélectionnées=dt<
//##Créer un PDF d'un tableau de données.jsl
etc......
Je saurais donc maintenant que //## signale le début d'un nouveau fichier de script et que son nom se situe entre //## et .jsl. Je saurais également qu'entre .jsl et le //## suivant se trouve le texte du script. Il semble donc que tous les identifiants soient présents. Je me demandais simplement s'il existait un moyen en JSL de lire le code de cette manière, en tirant parti de ces identifiants pour reconstruire les fichiers, ou si je devrais effectuer cette partie dans un autre programme.
Merci pour toutes vos réflexions supplémentaires !
Re: Script pour copier le code du fichier script dans un fichier texte et pouvoir ensuite le lireCela ne diffère pas vraiment de l'analyse de texte et est assez facile à réaliser avec JSL. Si nous supposons que nous avons combiné un fichier comme celui-ci,
//##label script.jsl
//rev 5-9-25
names default to here(1);
dt=current datatable();
selected_rows=dt<
<GET selected="" rows=""></GET>
<P>et il devrait être séparé en script d'étiquette.jsl et Créer un PDF d'une table de données.jsl, je ferais quelque chose comme ça</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();
Notez que cela supprimera les modifications de lignes supplémentaires de vos données, du fait du fonctionnement de Words. Si vous souhaitez les conserver, vous pouvez effectuer une boucle sur le texte en utilisant « Contains » et « Substr », ou une méthode similaire.
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);
);