Tabla de datos de salida junto con mensaje de error de una función (JMP13)Mi secuencia de comandos de función JSL a continuación extrae un archivo de una carpeta de red y lo genera en un archivo de datos para usar en otro lugar. ¿Cómo puedo generar el mensaje de error "Este archivo de límite no existe! Compruebe el nombre del archivo" junto con el archivo de datos. Estoy en 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);
);Además, en el caso de un error, ¿cómo detener la ejecución del código donde se usa la función y mostrar al usuario un cuadro de diálogo con el mensaje de error?
secuencias de comandosRe: Tabla de datos de salida junto con mensaje de error de una función (JMP13)Gracias @jthi , Sí, JMP 13 tiene archivo existe (). Voy a intentarlo.
No expresé mi consulta correctamente antes. Cuando el archivo no existe, solo quiero que la función muestre el error en un cuadro de diálogo y detenga la ejecución.
Cuando existe el archivo, solo quiero la tabla de datos y la salida del mensaje. ¿Cómo lograr esto?
Re: Tabla de datos de salida junto con mensaje de error de una función (JMP13)Si JMP13 proporciona la función File Exists(), puede usarla con la instrucción if. Entonces es una decisión qué devolver / cómo detener el programa. Puede usar, por ejemplo, Throw() o 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...");
Editar:
¿Qué tabla de datos le gustaría devolver con el error? Si no puede abrir el archivo, no hay una tabla de datos para devolver a menos que cree una vacía.
Re: Tabla de datos de salida junto con mensaje de error de una función (JMP13)Todavía no tengo un cuadro de diálogo en el código principal que usa la función.
Cuando hay un error debido a que el usuario pasa un nombre de archivo incorrecto, quiero que el código principal muestre al usuario un cuadro de diálogo con el error y detenga cualquier ejecución adicional del código principal. Cuando no hay ningún error en el nombre del archivo, el archivo se extrae de la ubicación de la red y se pasa a una tabla de datos que debe estar disponible en el código principal. Espero haber respondido a tus preguntas. @jthi .
Re: Tabla de datos de salida junto con mensaje de error de una función (JMP13)¡Claro, eso debería ser suficiente! Esto dependerá un poco de la aplicación (y del programador/guionista) de cómo desea manejar el error.
El siguiente ejemplo tiene dos opciones bastante simples de cómo podría manejar esto. Si JMP13 se comporta de manera similar a JMP16, ambos deberían estar bien (por supuesto, también depende de su aplicación). La diferencia es que el primero arrojará un error dentro de la función, el segundo devolverá una cadena si hay un problema con la ruta del archivo y el resultado se maneja fuera de la función.
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: Tabla de datos de salida junto con mensaje de error de una función (JMP13)Gracias @jthi . como atrapar el tirar mensaje en un cuadro de diálogo? A continuación no parece funcionar.
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: Tabla de datos de salida junto con mensaje de error de una función (JMP13)En ese caso, use Return() en lugar de Throw()
Re: Tabla de datos de salida junto con mensaje de error de una función (JMP13)Prefiero el lanzamiento porque se puede atrapar si es necesario y detiene el JSL si no se atrapa.
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 ) );