Vérifier si le tableau est en lecture seule ?Hé,
J'ai un gros script JSL dans lequel, à un moment donné, il ouvre quelques tables de données, y place des données, les enregistre et les ferme.
Maintenant, normalement, cela fonctionne bien sans aucun problème. Mais les tables de données qu'il ouvre se trouvent sur le serveur de l'entreprise et il arrive parfois que quelqu'un d'autre ouvre le fichier, ce qui signifie que le script ouvre une version en lecture seule et ne peut pas y enregistrer.
Existe-t-il un moyen d'ajouter au script un moyen de vérifier si le fichier est ouvert en mode lecture seule, afin de pouvoir annuler le script et avertir l'utilisateur ? Quelque chose de similaire à Excel où si vous ouvrez un fichier utilisé par quelqu'un d'autre, vous recevez un message "Fichier utilisé par X, souhaitez-vous ouvrir une version en lecture seule ?".
Merci,
EdvinRe : Vérifier si le tableau est en lecture seule ?J'ai finalement trouvé une solution qui fonctionne, donc je la publie au cas où quelqu'un d'autre trouverait ce fil à l'avenir.
dt = Data Table("Untitled");
Try(test = LogCapture(dt << save));
If(Contains(test, "problem"),
New Window("Error",
<<MODAL></MODAL>Si la table est en lecture seule et ne peut pas être verrouillée, test deviendra
test = "
I/O problem.
File not open in Write mode.
";
d'où pourquoi le Contains(test, "problem") fonctionne.
Re : Vérifier si le tableau est en lecture seule ?Ouais j'ai aussi le sentiment que c'est quelque chose de simple qui nous manque, merci quand même. Quelqu'un d'autre a-t-il une idée ?
Re : Vérifier si le tableau est en lecture seule ?Désolé, je suis à court d'idées. Peut-être qu'un autre contributeur pourrait trouver un moyen. (C'est probablement quelque chose de simple qui ne m'est pas venu à l'esprit.)
Re : Vérifier si le tableau est en lecture seule ?Hé,
J'ai essayé cette solution et essayé de construire la fonction Try de différentes manières, mais elle ne semble jamais atteindre la 2ème expression, même si la première génère une erreur. La table est toujours fermée, mais pas enregistrée. Voici à quoi ressemble le fichier journal :
Names Default to Here(1);
dt = Data Table("CharData G4 v3.0");
dt << add rows(1);
Try(
Close( dt, Save ),
Print( "Data table locked" );
);
I/O problem.
File not open in Write mode. Re : Vérifier si le tableau est en lecture seule ?OK, utilisez peut-être la fonction Try( expr1, expr2 ). Le premier argument est une expression toujours évaluée. Utilisez votre opération de sauvegarde pour le premier argument. Le deuxième argument est une expression qui n'est évaluée que si le premier argument génère une erreur. De cette façon, vous pouvez détecter l'erreur.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// changes made to data table, save table
Try(
Close( dt, Save ),
Print( "Data table locked" );
);
// rest of script
Re : Vérifier si le tableau est en lecture seule ?Hé, merci beaucoup pour les réponses. Malheureusement, aucune des solutions ne fonctionne pour moi, << Get Lock renvoie '0' et << Get Edit Lock renvoie 'Empty()'.
J'ai maintenant une table ouverte sur un autre ordinateur et sur le mien. Je peux le modifier autant que je veux sur mon propre ordinateur, rien n'est verrouillé. Mais lorsque j'essaie de le sauvegarder, je n'y parviens pas et j'obtiens le même message d'erreur qu'avant : "Problème d'E/S. Fichier non ouvert en mode écriture.".Re : Vérifier si le tableau est en lecture seule ?Oubliez ma suggestion ci-dessus. Les verrous d'édition sont distincts de l'ancien mécanisme de verrouillage. Une approche simple consiste à ouvrir la table de données et à envoyer le message << Get Lock à n'importe quelle colonne. Si la table de données est verrouillée, toutes les colonnes le sont également. Le résultat devrait être vrai (1).
Re : Vérifier si le tableau est en lecture seule ?Voir Aide > Index des scripts. Recherchez « lock » et recherchez les messages Get Edit Lock et Set Edit Lock. Le premier obtiendra les informations d’état souhaitées. La seconde décrira les options qui pourraient être renvoyées.
Re : Vérifier si le tableau est en lecture seule ?Je voulais juste clarifier un peu plus, l'utilisateur reçoit un message d'erreur indiquant "Problème d'E/S. Le fichier ne s'ouvre pas en mode écriture."
Il n'apparaît que lorsque le script tente de sauvegarder la table, il peut donc sauvegarder les tables 1 et 2, mais ne parvient pas à sauvegarder la table 3, ce qui perturbe la gestion de mes données.
Je souhaite ajouter quelque chose qui vérifie le mode d'écriture avant d'essayer de sauvegarder l'une des tables. J'utilise JMP 13.