Comment abandonner le script et afficher un message d'erreur si l'enregistrement du fichier échoue ?Salut,
J'ai créé un script qui convertit JMP en fichier csv et l'enregistre sur les PC du réseau en utilisant leur adresse IP.
dt = Current Data Table();
ToolID = {"G01", "G02", "G03", "G04"};
IP_add = {"10.87.123.456", "10.87.123.789", "10.87.456.789", "10.87.789.123"};
current_pref = Char( Arg( Parse( Char( Get Preferences( Export settings ) ) ), 1 ) );
Pref( Export Settings( End Of Field( Comma ), Export Table Headers( 1 ) ) );
captxt = "";
For( i = 1, i <= N Items( IP_add ), i++,
dt << save( "\\" || IP_add[i] || "\c$\filedir\file.csv" );
Caption( "Updated " || Tester[i] || " \\" || IP_add[i] );
captxt = captxt || "
Updated " || ToolID[i] || " \\" || IP_add[i];
Wait( 0.2 );
);
Caption( captxt );
Eval( Parse( "pref(" || current_pref || ")" ) );Maintenant, nous avons remarqué que si nous oublions de mettre .csv dans la commande de sauvegarde, le script s'exécutera toujours jusqu'aux lignes suivantes et affichera la légende que la sauvegarde est réussie même si ce n'est pas le cas.
La seule façon de savoir que cela n'a pas réussi est de vérifier le fichier dans le PC réseau et le fichier journal JMP qui contient cette erreur :
Unable to save file. Unknown data target.
Ma question est la suivante. Si cette erreur se produit, comment arrêter le script et afficher un message d'erreur ? Ce type d'erreur "silencieuse" peut induire l'utilisateur en erreur.
J'ai essayé d'utiliser Try and Throw, mais cela n'a pas fonctionné.
Try(dt << save( "\\" || IP_add[i] || "\c$\filedir\file.csv" );, Caption("Error! Check log."); Throw());Merci,
Shaira
Re : Comment annuler le script et afficher un message d'erreur si l'enregistrement du fichier échoue ?@ian_jmp , merci! Je vais regarder ça.
@msharp , oui, à l'avenir, je pense que c'est la direction, même si cela nécessite de la logistique, de la paperasserie, etc. Donc pour l'instant, je considère la solution de script comme une solution à court terme.
Re : Comment annuler le script et afficher un message d'erreur si l'enregistrement du fichier échoue ?Bien que l'utilisation de la méthode d'horodatage soit une bonne idée, une meilleure idée pourrait être de repenser votre architecture de données.Votre méthode actuelle est loin d'être optimale. Sauvegarder le même csv à plusieurs emplacements et les écraser ne fait que jeter des données.Je recommanderais de chercher à créer une base de données.
Re : Comment annuler le script et afficher un message d'erreur si l'enregistrement du fichier échoue ?Concernant les horodatages, jetez un œil ici à 'DernièreModificationDate()'
Re : Comment annuler le script et afficher un message d'erreur si l'enregistrement du fichier échoue ?Salut @msharp ,
Merci pour la contribution. Malheureusement, je ne peux pas utiliser la méthode de vérification des fichiers car j'ai de nombreuses entrées d'adresse IP.
Le fichier est déjà là, et ce que j'ai besoin de savoir, c'est si le fichier a été mis à jour (peut être fait en vérifiant l'horodatage). Le mieux est de vérifier le ".csv" comme vous l'avez mentionné, mais je veux vraiment un poke-yoke car je ne sais pas quoi d'autre peut déclencher ces "erreurs silencieuses".
Je pense que je vais ajouter ceci au script actuel:
1. Exécutez les codes déjà écrits mais dans la boucle for, ajoutez des lignes de code pour obtenir l'horodatage du fichier avant et après l'enregistrement.
2. Signaler une erreur si les horodatages avant et après sont égaux.
Je ne sais pas encore comment obtenir l'horodatage mais je vais commencer par ceci: https://community.jmp.com/t5/Discussions/How-to-make-JSL-get-file-timestamp/td-p/3764
Merci encore.
Re : Comment annuler le script et afficher un message d'erreur si l'enregistrement du fichier échoue ?Enregistrez-le simplement, puis vérifiez si le fichier existe.Si ce n'est pas le cas, cela n'a pas été enregistré :
dt = Current Data Table();
ToolID = {"G01", "G02", "G03", "G04"};
IP_add = {"10.87.123.456", "10.87.123.789", "10.87.456.789", "10.87.789.123"};
current_pref = Char( Arg( Parse( Char( Get Preferences( Export settings ) ) ), 1 ) );
Pref( Export Settings( End Of Field( Comma ), Export Table Headers( 1 ) ) );
captxt = "";
For( i = 1, i <= N Items( IP_add ), i++,
location = "\\" || IP_add[i] || "\c$\filedir\file.csv";
dt << save( location );
//Should work, may not depending on your network settings
If( !File Exists( location ), Caption("Error! Failed to save to location: " || location); Throw());
//Could also try opening it, which will throw an error if it doesn't exist
Try(dttemp = Open(location); Close(dttemp, nosave), Caption("Error: " || exception_msg); Throw());
Caption( "Updated " || Tester[i] || " \\" || IP_add[i] );
captxt = captxt || "
Updated " || ToolID[i] || " \\" || IP_add[i];
Wait( 0.2 );
);
Caption( captxt );
Eval( Parse( "pref(" || current_pref || ")" ) );
Si le problème ne survient que lorsque " si nous oublions de mettre .csv dans la commande de sauvegarde", il serait plus logique de simplement vérifier si l'utilisateur l'a oublié et de le corriger pour lui.Cela dit, vous voudrez peut-être cette erreur s'il y a des problèmes de réseau ou de connexion.