Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Mon script de fonction JSL ci-dessous extrait un fichier d'un dossier réseau et le génère dans un fichier de données pour une utilisation ailleurs. Comment afficher le message d'erreur "Ce fichier limite n'existe pas ! Vérifier le nom du fichier" avec le fichier de données. Je suis sur JMP13.
Names Default To Here( 1 );
getLimitsFile = Function({LimFileName}, {dtspk},
dtspk = Try(
Open(
"\\gbshyt-ppor-334e\DBX\XPD\System\Limits\"||LimFileName||".txt",
columns(
New Column( "ParameterName", Character, "Nominal" ),
New Column( "ColumnLSL", Character, "Nominal" ),
New Column( "ColumnUSL", Character, "Nominal" ),
New Column( "ColumnUnits", Character, "Nominal" ),
New Column( "ColumnSymb", Character, "Nominal" ),
New Column( "ColumnComm", Character, "Nominal" )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
//,invisible)
),"This limit file does not exist! Check file name");
return(dtspk);
);De plus, en cas d'erreur, comment arrêter l'exécution ultérieure du code où la fonction est utilisée et afficher à l'utilisateur une boîte de dialogue avec le message d'erreur ?
ScriptRe : Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Si JMP13 fournit la fonction File Exists(), vous pouvez l'utiliser avec l'instruction if. Ensuite, il s'agit de décider quoi retourner / comment arrêter le programme. Vous pouvez utiliser par exemple Throw() ou Stop()
Names Default To Here(1);
getLimitsFile = Function({LimFileName}, {dtspk},
If(!File Exists("\\gbshyt-ppor-334e\DBX\XPD\System\Limits\"||LimFileName||".txt"),
Throw("This limit file does not exist! Check file name");
//or use return and throw outside function
);
//Open...
return(dtspk);
);
getLimitsFile("");
Show("continue...");
Éditer:
Quelle table de données souhaitez-vous renvoyer avec l'erreur ? Si vous ne pouvez pas ouvrir le fichier, il n'y a pas de table de données à renvoyer à moins que vous n'en créiez une vide.
Re : Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Merci @jthi , Oui, JMP 13 a un fichier existant (). Je vais essayer.
Je n'ai pas formulé ma requête correctement plus tôt. Lorsque le fichier n'existe pas, je souhaite simplement que la fonction affiche simplement l'erreur dans une boîte de dialogue et arrête toute exécution ultérieure.
Lorsque le fichier existe, je ne veux que la table de données et la sortie du message. Comment y parvenir ?
Re : Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Avez-vous une boîte de dialogue en dehors de la fonction que vous souhaitez remplir avec le message d'erreur ? Et avec datatable, vous souhaitez renvoyer la sortie du message avec datatable ?
Re : Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Je n'ai pas encore de boîte de dialogue sur le code principal qui utilise la fonction.
Lorsqu'il y a une erreur due à l'utilisateur passant un nom de fichier incorrect, je veux que le code principal affiche à l'utilisateur une boîte de dialogue avec l'erreur et arrête toute exécution ultérieure du code principal. Lorsqu'il n'y a pas d'erreur dans le nom du fichier, le fichier est extrait de l'emplacement réseau et transmis dans une table de données qui doit être disponible dans le code principal. J'espère avoir répondu à vos questions @jthi .
Re : Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Bien sûr, cela devrait suffire ! Cela dépendra un peu de l'application (et du programmeur/scripteur) de la manière dont vous souhaitez gérer l'erreur.
L'exemple ci-dessous propose deux options assez simples pour gérer cela. Si JMP13 se comporte de la même manière que JMP16, les deux devraient convenir (bien sûr, cela dépend aussi de votre application). La différence est que le premier génèrera une erreur à l'intérieur de la fonction, le second renverra une chaîne s'il y a un problème avec le chemin du fichier et que le résultat est géré en dehors de la fonction.
Names Default To Here(1);
open_file_with_throw = function({file_path}, {default local},
If(!File Exists(file_path), //! inverts the File Exists result
Throw(Eval Insert("^file_path^ file doesn't exist, check file path"));
);
dt = Open(file_path);
return(dt); //return datatable reference
);
open_file_with_throw("testpath");
Show("Shouldn't be executed, due to throw");
//with working file path you will get reference to opened table returned
dt = open_file_with_throw("$SAMPLE_DATA/Big Class.jmp");
open_file_with_return = function({file_path}, {default local},
If(!File Exists(file_path), //! inverts the File Exists result
return(Eval Insert("^file_path^ file doesn't exist, check file path"));
);
dt = Open(file_path);
return(dt); //return datatable reference
);
// this wont error, so you will have to handle error yourself
// one thing I don't like about this solution, is that you will have two different types of returns
// from same function
result = open_file_with_return("testpath");
If(Type(result) == "String",
//Throw(result);
//or you can build the error with modal window and stop after it is closed
//@craige_hales post has quite good template for this type of modals here: https://community.jmp.com/t5/Uncharted/Modal-Dialogs/ba-p/436177
//below is very simple one
New window("Error", << modal,
text box(result)
);
stop();
);
Show("Shouldn't be executed, due to stop");
dt = open_file_with_throw("$SAMPLE_DATA/Big Class.jmp");
Re : Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Merci @jthi . Comment attraper le lancer message dans une boîte de dialogue ? Ci-dessous ne semble pas fonctionner.
Names Default To Here(1);
open_file_with_throw = function({file_path}, {default local},
If(!File Exists(file_path), //! inverts the File Exists result
Throw(Eval Insert("^file_path^ file doesn't exist, check file path"));
);
dt = Open(file_path);
return(dt); //return datatable reference
);
result = open_file_with_throw("testpath");
Show(result);
If(Type(result) == "String",
New window("Error", << modal,
text box(result)
);
stop();
);
Re : Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Dans ce cas, utilisez Return() au lieu de Throw()
Re : Tableau de données de sortie avec message d'erreur d'une fonction (JMP13)Je préfère le lancer car il peut être attrapé si nécessaire et arrête le JSL s'il n'est pas attrapé.
open_file_with_throw = Function( {file_path},
{default local},
If( !File Exists( file_path ), //! inverts the File Exists result
Throw( Eval Insert( "^file_path^ file doesn't exist, check file path" ) )
);
dt = Open( file_path );
Return( dt ); //return datatable reference
);
moreJSL = Function( {dt},
Show( N Rows( dt ) );
Close( dt, nosave );
);
errorHandler = Function( {msg}, Show( msg ) );
Write( "\!ncase 1:" );
Try(
dt = open_file_with_throw( "$sample_data/big class.jmp" ),
dt = Empty();
errorHandler( exception_msg );
);
If( !Is Empty( dt ),
moreJSL( dt )
);
Write( "\!ncase 2:" );
Try(
dt = open_file_with_throw( "testpath" ),
dt = Empty();
errorHandler( exception_msg );
);
If( !Is Empty( dt ),
moreJSL( dt )
);
// or even this, but the error handler may be handling exceptions from moreJSL() as well as open_file_with_throw()
Write( "\!ncase 3:" );
Try( moreJSL( open_file_with_throw( "$sample_data/big class.jmp" ) ), errorHandler( exception_msg ) );
Write( "\!ncase 4:" );
Try( moreJSL( open_file_with_throw( "testpath" ) ), errorHandler( exception_msg ) );