<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho una cartella con 365 file .csv. Voglio convertire ciascun file .csv in un file .jmp ed eliminare alcune colonne nel file .jmp, quindi salvare il file .jmp con il nome del file .csv ed uscire da JMP. Tutto questo deve essere fatto automaticamente con uno script JSL.
Ho già uno script batch, che avvia uno script JSL e trasmette un file .csv allo script JSL. Lo script JSL apre quindi il file .csv ed elimina le colonne che desidero eliminare.
Ho un problema quando si tratta di salvare il file .jmp e uscire da JMP con lo script JSL in modo che lo script batch inizi con il successivo file .csv da aprire con lo script JSL.
Il file .jmp non verrà salvato e quindi JMP non si chiude, quindi l'intero processo batch si interrompe, perché il mio script batch attende la chiusura di JMP.
Apro i file .csv in base alla risposta dell'utente "twaintwist" in fondo a questa discussione: Passaggio dei parametri allo script JSL
Tutti i miei file .csv + lo script batch + lo script .jsl si trovano nella stessa cartella.
Questa soluzione funziona bene per me, quindi ecco il mio script batch:
per %%f in (*.csv) fai (
echo nomefile = "%%~nf.csv";>file.txt
copia /y /b file.txt+mioScript.jsl temp.jsl
JMP temp.jsl
timeout / t 5
del %%~nf.csv
timeout / t 5
del file.txt
timeout / t 5
del temp.jsl
)
pausa
Il mio script JSL apre quindi il file .csv consegnato dallo script .bat ed elimina alcune colonne. Ma dopo aver eliminato le colonne sembra che il mio script JSL si fermi.
Il file .jmp non verrà salvato e JMP non si chiuderà. Come puoi vedere nello Script ho provato diversi metodi per salvare e chiudere la finestra con JSL.
Quindi ecco il mio script JSL:
doc = Apri(nomefile);
dt = Tabella dati corrente();
// Disattiva l'aggiornamento del display per consentire l'aggiornamento rapido di una tabella dati.
dt << Inizia l'aggiornamento dei dati;
ListaCol = {
//#COLONNE DA ELIMINARE#
};
dt << Elimina colonne(ColList);
dt << Fine aggiornamento dati;
nomeLunghezza = Lunghezza(nomefile);
fielName = Left(fileName, nameLength - 3);
Nome = nomefile || "jmp";
dt<
doc<
aspetta(10);
Chiudi (dt, nosave);
Chiudi (doc, NoSave);
//doc << chiudi la finestra;
//dt<
//Chiudi tutto(Tabelle dati, salva(nomefile+"jmp"));
Esci(nosalva);
Esci(nosalva);
È possibile pianificare gli script JSL così come si pianificano i file .bat.
Aggiungere un '//!' alla prima riga del tuo script OPPURE cambia il .jsl in un .rpt e verrà eseguito automaticamente una volta aperto.Quindi è sufficiente che l'utilità di pianificazione di Windows punti allo script JMP anziché al file batch.
Sto solo dicendo.
Sfortunatamente questo processo appartiene a un sistema più grande e devo poterlo programmare con lo scheduler di Windows, quindi avrò comunque bisogno del .BAT, ma grazie per avermi ricordato che potrebbe essere fatto solo in JSL 
Ottimo, sono felice che tu abbia funzionato.
Potresti anche fare tutto questo in JSL senza un file .BAT.Ciò potrebbe (o meno) semplificare il processo complessivo.JSL ha una funzione FilesInDirectory e potenti funzioni di manipolazione delle stringhe in grado di creare e convalidare nomi di file.Se la tua soluzione attuale è troppo lenta a causa di attese e timeout e del ripetuto avvio/arresto di JMP, potresti voler eliminare il file .BAT.
Grazie mille! La tua soluzione ha risolto il mio problema...
Essendo un principiante assoluto in JSL non sapevo che esistesse qualcosa come un registro.
Mentre controllavo il registro ho notato che la mia funzione di eliminazione delle colonne non funzionava correttamente come pensavo, perché avevo digitato in modo errato uno dei nomi delle colonne e quindi la funzione si è interrotta.
Tuttavia anche chiudere dt e doc è stato sbagliato, ma alla fine non è stato un grosso problema.
Ancora una volta grazie per il tuo aiuto!
Controlla la presenza di messaggi nel registro JSL.chiudere dt e doc potrebbe essere un problema; sono lo stesso tavolo?