Come imporre a JMP di aprire un file in modalità di sola lettura?Carissimi,
Uso un metodo per aggiornare i componenti aggiuntivi come descritto in https://community.jmp.com/t5/JMP-Scripts/How-to-write-self-updating-JMP-add-ins/ta-p/21932/jump-to/first-unread-message di @Jeff_Perkinson . C'è un file "metadata.jmp" che deve essere aperto all'avvio di JMP. Ho riscontrato alcuni problemi con l'apertura automatica di questo file da parte di molti utenti, perché in alcune circostanze un utente potrebbe mantenere quel file aperto per molto tempo (senza saperlo), e quindi non sono in grado di aggiornare questo file.
Anche in altri casi (datatable di grandi dimensioni condivisi da molti utenti) può essere utile aprire i file in modalità di sola lettura.
Esiste la possibilità di imporre a JMP di aprire una tabella di dati ecc. in modalità di sola lettura?
Automazione e scriptingMiscelazione e pulizia dei datiRi: Come imporre a JMP di aprire un file in modalità di sola lettura?Grazie a tutti per le tante proposte, le proverò e troverò una buona soluzione.
Ri: Come imporre a JMP di aprire un file in modalità di sola lettura?@Georg
Alcune ipotesi sulla tua applicazione.
1. più persone non scrivono contemporaneamente sui metadati
2. è una chiamata di sola lettura a "c'è una nuova versione di una delle mie app?Dove si trova?"
Se entrambi sono veri, normalmente utilizzerei effettivamente un database SQLite e vi effettuerei chiamate ODBC.Non direi che ci devono essere molti campanelli e fischietti se tutto ciò che stai facendo è recuperare i metadati.Inoltre potresti fare cose come archiviare effettivamente anche il componente aggiuntivo nel database.Le tabelle JMP sono ottime per molte cose.Ma per questa specifica applicazione, direi che è eccessivo.Se è solo una chiamata usa e getta che chiuderai non appena vedrai se c'è una nuova versione, ....
Puoi ancora scriverlo facilmente.Anche in questo caso non funzionerebbe bene se più utenti scrivono contemporaneamente. La cosa importante è che quando JMP apre un CSV non blocca il file originale come fa con una tabella JMP.
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
csv_path = convert file path("$DESKTOP\Big Class.csv");
dt << Save As(csv_path);
close(dt, no save);
dt_csv = open(csv_path);
dt_csv << Add Rows({:name = "Fake", :age = 14, :sex = "F", :height = 14, :weight = 28});
dt_csv:age[1] = 0;
// I can still delete this file even though I have the table open
show(delete file(csv_path));
dt_csv << Save As(csv_path);
In genere andrei senza la funzionalità della tabella JMP piuttosto che gestire più livelli di autorizzazione.Perché se apri un csv in uno script JMP, si apre una tabella JMP che non è legata
Ri: Come imporre a JMP di aprire un file in modalità di sola lettura?Salvataggio su disco come nascosto o di sola lettura ha uno snippet RunProgram per eseguire il comando DOS attrib. È possibile contrassegnare il file come di sola lettura o rimuovere il contrassegno.
Ri: Come imporre a JMP di aprire un file in modalità di sola lettura?Un suggerimento: il Gestore componenti aggiuntivi Quello @Justin_Chilton creato automatizza il metodo che @Jeff_Perkinson descritto.Il componente aggiuntivo aggiorna un file .jsl contenente un array associativo che viene letto dagli utenti.
Ri: Come imporre a JMP di aprire un file in modalità di sola lettura?@vince_faller grazie, nel mio caso è preferibile una tabella jmp, ho una piccola tabella, che devo modificare (da JMP).
In un altro caso, quando avrei tabelle grandi, utilizzate da molti utenti, sarebbe meglio anche una tabella jmp, perché la conversione non è necessaria, no?
Inoltre la tabella jmp ha più funzionalità (script, tipi di dati ...), quindi preferirei sempre la tabella jmp come tipo di file.
Ri: Come imporre a JMP di aprire un file in modalità di sola lettura?Potresti trasformare la tua tabella JMP in un csv?
Ri: Come imporre a JMP di aprire un file in modalità di sola lettura?@ih grazie per le tue idee, cercherò di trovare una buona soluzione di lavoro con esso.
L'impostazione delle autorizzazioni nel filesystem è una soluzione semplice che preferirei, ma esaminandola in dettaglio (i file sono sul file server), ho trovato molti utenti per cui impostare i diritti, quindi si è rivelato complesso. Perché abbiamo alcune centinaia di utenti che utilizzano i file e non so sotto quali utenti agiscano.
Ho solo un'altra idea:
- per copiare il file in $TEMP e quindi aprirlo
Ri: Come imporre a JMP di aprire un file in modalità di sola lettura?Non sono sicuro di come aprire un file in sola lettura (se qualcuno lo sa, per favore intervenga), ma ecco alcune idee che potrebbero aiutarti ad alleviare il tuo problema:
- Modifica le autorizzazioni dei file in modo che la maggior parte degli utenti abbia accesso in sola lettura a quel file.
- Rendi breve e semplice la sezione di codice che richiede l'apertura del file e avvolgila in un blocco try.Dopo il blocco try che gestisce le operazioni sui file, o nella sezione catchExpr, includi il codice per chiudere il file.Per esempio:
try(
//Work with the file here
dt = Open("a file");
values = dt:Column << get values;
dt << Close;
, //This is the catchExpr, it is executed on an error.
//Make sure the file is closed, but don't throw another if it wasn't open.
try( dt << Close );
//Now raise an error.
throw( "Error working with metadata file: " || char( Exception_msg ) );
);
//Or you could close the file in a subsequent try function
try(
//Work with the file here
dt = Open("a file");
values = dt:Column << get values;
);
try( dt << Close );
//Now do any time consuming functions on the data extracted from that file
//show(values);