Come interrompere lo script e mostrare un messaggio di errore se il salvataggio del file fallisce?CIAO,
Ho creato uno script che converte JMP in un file csv e lo salva sui PC di rete utilizzando il loro indirizzo 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 || ")" ) );Ora, abbiamo notato che se dimentichiamo di inserire .csv nel comando di salvataggio, lo script verrà comunque eseguito fino alle righe successive e mostrerà la didascalia che il salvataggio è riuscito anche se non lo è.
L'unico modo per sapere che non ha esito positivo è controllare il file nel PC di rete e il file di registro JMP che presenta questo errore:
Unable to save file. Unknown data target.
La mia domanda è questa. Se si verifica questo errore, come interrompiamo lo script e mostriamo un messaggio di errore? Questo tipo di errore "silenzioso" può essere fuorviante per l'utente.
Ho provato a usare Try and Throw, ma non ha funzionato.
Try(dt << save( "\\" || IP_add[i] || "\c$\filedir\file.csv" );, Caption("Error! Check log."); Throw());Grazie,
Shaira
Ri: Come interrompere lo script e mostrare un messaggio di errore se il salvataggio del file fallisce?@ian_jmp , Grazie! Esaminerò questo.
@msharp , sì, in futuro penso che questa sia la direzione, anche se ha bisogno di logistica, scartoffie, ecc. Quindi per ora, sto guardando la soluzione della sceneggiatura come soluzione a breve termine.
Ri: Come interrompere lo script e mostrare un messaggio di errore se il salvataggio del file fallisce?Sebbene l'utilizzo del metodo timestamp sia una buona idea, un'idea migliore potrebbe essere quella di ripensare l'architettura dei dati.Il tuo metodo attuale non è ottimale salvando lo stesso csv in più posizioni e sovrascrivendoli sta semplicemente eliminando i dati.Consiglierei di esaminare la creazione di un database.
Ri: Come interrompere lo script e mostrare un messaggio di errore se il salvataggio del file fallisce?Per quanto riguarda i timestamp, dai un'occhiata Qui in 'DataUltima Modifica()'
Ri: Come interrompere lo script e mostrare un messaggio di errore se il salvataggio del file fallisce?CIAO @msharp ,
Grazie per l'input. Sfortunatamente, non posso eseguire il metodo di controllo dei file poiché ho molti input di indirizzi IP.
Il file è già lì e quello che devo sapere è se il file è stato aggiornato (può essere fatto controllando il timestamp). Meglio controllare ".csv" come hai detto, ma voglio davvero un poke-yoke poiché non so cos'altro possa innescare questi "errori silenziosi".
Penso che aggiungerò questo allo script corrente:
1. Eseguire i codici già scritti ma nel ciclo for, aggiungere righe di codice per ottenere il timestamp del file prima e dopo il salvataggio.
2. Contrassegnare un errore se il timestamp precedente e successivo sono uguali.
Non so ancora come ottenere il timestamp ma inizierò da questo: https://community.jmp.com/t5/Discussions/How-to-make-JSL-get-file-timestamp/td-p/3764
Grazie ancora.
Ri: Come interrompere lo script e mostrare un messaggio di errore se il salvataggio del file fallisce?Basta salvarlo e quindi verificare se il file esiste.In caso contrario, non è stato salvato:
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 || ")" ) );
Se il problema si verifica solo quando " se ci dimentichiamo di inserire .csv nel comando di salvataggio", avrebbe più senso controllare se l'utente l'ha dimenticato e correggerlo.Detto questo, potresti volere questo errore se ci sono problemi di rete o di connessione.