Enregistrement et écrasement de fichiersJ'ai un script JSL qui ouvre et ferme des feuilles de serval. Pendant qu'ils sont ouverts, il fusionne les documents en un seul fichier, puis enregistre le fichier dans un dossier local. Le script écrase actuellement le fichier existant dans le dossier local. Existe-t-il un script qui remplirait un nouveau fichier dans un sous-dossier (idéalement, distingué en marquant l'horodatage de création sur le titre "Fusionné") chaque fois que le script est exécuté, au lieu d'écraser l'actuel ? Ou mieux encore, c'est bon si l'actuel est écrasé, mais une copie de celui-ci est enregistrée dans un sous-dossier à chaque exécution du script ? Un peu comme un historique que je peux consulter, mais les autres ne peuvent voir que la version "en direct"
@txnelson , je vous ai vu aider ici avec quelque chose de similaire : https://community.jmp.com/t5/Discussions/Save-new-graph-instead-of-overwriting-the-already-saved-ones/mp/54078#M30546
C'est peut-être une variante de ça ?
Tableau de donnéesScriptles fenêtresRe : Enregistrement et écrasement de fichiersLes deux options sont possibles avec peu de scripts. Vous pouvez facilement obtenir "l'horodatage" en utilisant Today().
Voici un exemple assez simple de la façon dont vous pourriez simplement enregistrer avec l'horodatage :
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
table_name = dt << get name;
timestamp = Today();
save_path = Eval Insert("$temp\^timestamp^_^table_name^.jmp");
dt << Save(save_path);
Open("$temp");
Avec l'enregistrement dans un autre dossier, vous pouvez simplement effectuer deux enregistrements avec des chemins et des noms de fichiers différents ou copier le fichier.
Re : Enregistrement et écrasement de fichiersVous pouvez utiliser
rc = Copy File( from, to );
pour copier le fichier.Regardez dans l'éditeur de script pour les détails et un bon exemple sur le fichier de copie
Une fois que vous avez copié le fichier dans le sous-répertoire souhaité, vous pouvez simplement utiliser
data table("table name") << Save ("file path" );
pour enregistrer la nouvelle table.Dans le chemin du fichier, vous indiquez le chemin et le nom complet du fichier, y compris l'extension .jmp.
Re : Enregistrement et écrasement de fichiersMerci jti !
Le script fonctionne très bien, sauf que l'horodatage remplit des valeurs telles que "3727386650" avant le nom de la table. J'ai essayé de faire un horodatage:
timestamp = As Date( Today() );
Pour remplir la date et l'heure, mais le script n'a pas pu enregistrer le fichier.
Re : Enregistrement et écrasement de fichiersToday() génère un horodatage, mais il s'agit de la valeur de date et d'heure JMP Utilisation de dates, d'heures, de dates-heures et de durées dans JMP .
Si vous utilisez AsDate(), il contiendra très probablement des caractères qui ne sont pas autorisés dans les noms de fichiers. Quel type de format souhaitez-vous ? Vous pouvez le construire à partir du datetime Today () vous donne, consultez la partie Scripting Index et Date Time :

À partir de là, vous pouvez trouver des fonctions telles que Year(), Month(), Day(), Hour(), Minute() et Second() avec celles-ci (combinées avec Char() ou Eval Insert(), vous pouvez créer la version la plus robuste de l'horodatage que vous voulez.
Éditer:
C'est un peu long, mais il devrait être assez robuste et vous donner essentiellement une chaîne au format AAAAMMJJ_hhmmss
Names Default To Here(1);
cur_time = Today();
yyyy = char(Year(cur_time));
//add spanning
mm = char(Month(cur_time));
mm = Substr("00", 1, 2 - Length(mm)) || mm;
dd = char(Day(cur_time));
dd = Substr("00", 1, 2 - Length(dd)) || dd;
hh = char(Hour(cur_time));
hh = Substr("00", 1, 2 - Length(hh)) || hh;
min = char(Minute(cur_time));
min = Substr("00", 1, 2 - Length(min)) || min;
ss = char(Second(cur_time));
ss = Substr("00", 1, 2 - Length(ss)) || ss;
timestamp_str = yyyy || mm || dd ||"_"|| hh || min || ss;