Comment obliger JMP à ouvrir un fichier en mode lecture seule ?Chers tous,
J'utilise une méthode pour mettre à jour Addins comme décrit dans https://community.jmp.com/t5/JMP-Scripts/How-to-write-self-updating-JMP-add-ins/ta-p/21932/jump-to/first-unread-message par @Jeff_Perkinson . Là, un fichier "metadata.jmp" doit être ouvert au démarrage de JMP. J'ai rencontré des problèmes avec l'ouverture automatique de ce fichier par de nombreux utilisateurs, car dans certaines circonstances, un utilisateur peut garder ce fichier ouvert pendant une longue période (sans le savoir), puis je ne peux pas mettre à jour ces fichiers.
Dans d'autres cas également (tables de données volumineuses partagées par de nombreux utilisateurs), il peut être judicieux d'ouvrir les fichiers en mode lecture seule.
Est-il possible d'appliquer JMP pour ouvrir une table de données, etc. en mode lecture seule ?
Automatisation et scriptFusion et nettoyage des donnéesRe : Comment appliquer JMP pour ouvrir un fichier en mode lecture seule ?Merci à tous pour tant de propositions, je vais les essayer et je trouverai une bonne solution.
Re : Comment appliquer JMP pour ouvrir un fichier en mode lecture seule ?@Georg
Quelques hypothèses sur votre application.
1. plusieurs personnes n'écrivent pas simultanément dans les métadonnées
2. c'est un appel en lecture seule à "y a-t-il une nouvelle version de l'une de mes applications ?Où est-il?"
Si les deux sont vrais, j'utiliserais normalement une base de données SQLite et je lui ferais des appels ODBC.Je ne dirais pas qu'il doit y avoir beaucoup de cloches et de sifflets si tout ce que vous faites est de récupérer des métadonnées.De plus, vous pouvez également stocker le complément dans la base de données.Les tableaux JMP sont parfaits pour beaucoup de choses.Mais pour cette application spécifique, je dirais que c'est exagéré.Si c'est juste un appel jetable que vous allez fermer dès que vous voyez s'il y a une nouvelle version, ....
Vous pouvez toujours le scripter facilement.Encore une fois, cela ne fonctionnerait pas bien si plusieurs utilisateurs écrivaient en même temps. Le gros problème est que lorsque JMP ouvre un CSV, il ne verrouille pas le fichier d'origine comme il le fait avec une table JMP.
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
csv_path = convert file path("$DESKTOP\Big Class.csv");
dt << Save As(csv_path);
close(dt, no save);
dt_csv = open(csv_path);
dt_csv << Add Rows({:name = "Fake", :age = 14, :sex = "F", :height = 14, :weight = 28});
dt_csv:age[1] = 0;
// I can still delete this file even though I have the table open
show(delete file(csv_path));
dt_csv << Save As(csv_path);
Je me passerais généralement de la fonctionnalité de table JMP plutôt que de gérer plusieurs niveaux d'autorisations.Parce que si vous ouvrez un csv dans un script JMP, il ouvre une table JMP qui n'est pas liée
Re : Comment appliquer JMP pour ouvrir un fichier en mode lecture seule ?Enregistrement sur disque en mode masqué ou en lecture seule a un extrait RunProgram pour exécuter la commande attrib DOS. Vous pouvez marquer le fichier en lecture seule ou effacer l'indicateur.
Re : Comment appliquer JMP pour ouvrir un fichier en mode lecture seule ?Une suggestion : le Gestionnaire de compléments ce @Justin_Chilton créé automatise la méthode qui @Jeff_Perkinson décrit.Le complément met à jour un fichier .jsl contenant un tableau associatif qui est lu par les utilisateurs.
Re : Comment appliquer JMP pour ouvrir un fichier en mode lecture seule ?@vince_faller merci, dans mon cas, une table jmp est préférée, j'ai une petite table, que j'ai besoin d'éditer (par JMP).
Dans un autre cas, lorsque j'aurais de grandes tables, qui sont utilisées par de nombreux utilisateurs, une table jmp serait également préférable, car la conversion n'est pas nécessaire, n'est-ce pas ?
De plus, la table jmp a plus de fonctionnalités (scripts, types de données …), donc je préférerais toujours la table jmp comme type de fichier.
Re : Comment appliquer JMP pour ouvrir un fichier en mode lecture seule ?Pourriez-vous simplement faire de votre table JMP un fichier CSV ?
Re : Comment appliquer JMP pour ouvrir un fichier en mode lecture seule ?@ih merci pour vos idées, je vais essayer de trouver une bonne solution de travail avec elle.
La définition des autorisations dans le système de fichiers est une solution simple que je préférerais, mais en y regardant en détail (les fichiers sont sur le serveur de fichiers), j'ai trouvé de nombreux utilisateurs pour lesquels définir les droits, et cela s'est donc avéré complexe. Parce que nous avons quelques centaines d'utilisateurs qui utilisent les fichiers, et je ne sais pas sous quels utilisateurs ils agissent.
Juste j'ai une autre idée :
- pour copier le fichier dans $TEMP puis l'ouvrir
Re : Comment appliquer JMP pour ouvrir un fichier en mode lecture seule ?Je ne sais pas comment ouvrir un fichier en lecture seule (si quelqu'un le sait, merci d'intervenir), mais voici quelques idées qui pourraient vous aider à résoudre votre problème :
- Modifiez les autorisations de fichier afin que la plupart des utilisateurs aient un accès en lecture seule à ce fichier.
- Faites en sorte que la section de code qui nécessite l'ouverture du fichier soit courte et simple, et encapsulez-la dans un bloc try.Après le bloc try qui gère les opérations sur le fichier, ou dans la section catchExpr, incluez le code pour fermer le fichier.Par exemple:
try(
//Work with the file here
dt = Open("a file");
values = dt:Column << get values;
dt << Close;
, //This is the catchExpr, it is executed on an error.
//Make sure the file is closed, but don't throw another if it wasn't open.
try( dt << Close );
//Now raise an error.
throw( "Error working with metadata file: " || char( Exception_msg ) );
);
//Or you could close the file in a subsequent try function
try(
//Work with the file here
dt = Open("a file");
values = dt:Column << get values;
);
try( dt << Close );
//Now do any time consuming functions on the data extracted from that file
//show(values);