Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?Verehrte Gäste,
Ich verwende eine Methode zum Aktualisieren von Add-Ins, wie in beschrieben https://community.jmp.com/t5/JMP-Scripts/How-to-write-self-updating-JMP-add-ins/ta-p/21932/jump-to/first-unread-message von @Jeff_Perkinson . Beim Start von JMP muss die Datei „metadata.jmp“ geöffnet werden. Ich hatte bei vielen Benutzern Probleme mit dem automatischen Öffnen dieser Datei, da ein Benutzer diese Datei unter bestimmten Umständen möglicherweise längere Zeit geöffnet ließ (ohne es zu wissen) und ich diese Dateien dann nicht aktualisieren konnte.
Auch in anderen Fällen (große Datentabellen, die von vielen Benutzern gemeinsam genutzt werden) kann es sinnvoll sein, Dateien im schreibgeschützten Modus zu öffnen.
Gibt es eine Möglichkeit, JMP dazu zu zwingen, eine Datentabelle usw. im schreibgeschützten Modus zu öffnen?
Automatisierung und SkripterstellungDatenmischung und -bereinigungBetreff: Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?Vielen Dank an alle für die vielen Vorschläge, ich werde sie ausprobieren und eine gute Lösung finden.
Betreff: Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?@Georg
Ein paar Annahmen zu Ihrer Bewerbung.
1. Mehrere Personen schreiben nicht gleichzeitig in Metadaten
2. Es handelt sich um einen schreibgeschützten Aufruf zu „Gibt es eine neue Version einer meiner Apps?“Wo ist es?"
Wenn beides zutrifft, würde ich normalerweise eine SQLite-Datenbank verwenden und ODBC-Aufrufe an diese durchführen.Ich würde nicht sagen, dass es eine Menge Schnickschnack geben muss, wenn Sie nur Metadaten abrufen.Außerdem könnten Sie beispielsweise das Add-In auch tatsächlich in der Datenbank speichern.JMP-Tische eignen sich für viele Dinge hervorragend.Aber für diese spezielle Anwendung würde ich sagen, dass es übertrieben ist.Wenn es nur ein Wegwerfaufruf ist, den Sie schließen, sobald Sie sehen, ob es eine neue Version gibt, ....
Sie können es immer noch problemlos per Skript erstellen.Auch dies würde nicht gut funktionieren, wenn mehrere Benutzer gleichzeitig schreiben. Das Wichtigste ist, dass JMP beim Öffnen einer CSV-Datei nicht die Originaldatei sperrt, wie es bei einer JMP-Tabelle der Fall wäre.
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);
Im Allgemeinen würde ich lieber auf die JMP-Tabellenfunktion verzichten, als mich mit mehreren Berechtigungsstufen zu befassen.Denn wenn Sie eine CSV-Datei in einem JMP-Skript öffnen, wird eine JMP-Tabelle geöffnet, die nicht gebunden ist
Betreff: Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?Verborgenes oder schreibgeschütztes Speichern auf der Festplatte verfügt über ein RunProgram-Snippet zum Ausführen des DOS-Befehls attrib. Sie können die Datei als schreibgeschützt markieren oder die Markierung löschen.
Betreff: Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?Ein Vorschlag: die Add-In-Manager Das @Justin_Chilton erstellt automatisiert die Methode, die @Jeff_Perkinson beschrieben.Das Add-In aktualisiert eine .jsl-Datei, die ein assoziatives Array enthält, das von Benutzern gelesen wird.
Betreff: Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?@vince_faller Danke, in meinem Fall wird eine JMP-Tabelle bevorzugt, ich habe eine kleine Tabelle, die ich bearbeiten muss (durch JMP).
In einem anderen Fall, wenn ich große Tabellen hätte, die von vielen Benutzern verwendet werden, wäre auch eine JMP-Tabelle besser, da keine Konvertierung erforderlich ist, nicht wahr?
Darüber hinaus verfügt die JMP-Tabelle über mehr Funktionalität (Skripte, Datentypen …), daher würde ich immer die JMP-Tabelle als Dateityp bevorzugen.
Betreff: Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?Könnten Sie Ihre JMP-Tabelle einfach in eine CSV-Datei umwandeln?
Betreff: Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?@ich h Vielen Dank für Ihre Ideen, ich werde versuchen, damit eine gute funktionierende Lösung zu finden.
Das Festlegen von Berechtigungen im Dateisystem ist eine einfache Lösung, die ich bevorzugen würde, aber als ich es mir im Detail ansah (Dateien befinden sich auf dem Dateiserver), fand ich viele Benutzer, für die ich die Rechte festlegen musste, und so stellte sich heraus, dass es komplex war. Weil wir ein paar hundert Benutzer haben, die die Dateien verwenden, und ich nicht weiß, unter welchen Benutzern sie agieren.
Mir ist gerade noch eine Idee gekommen:
- um die Datei nach $TEMP zu kopieren und dann zu öffnen
Betreff: Wie erzwinge ich, dass JMP eine Datei im schreibgeschützten Modus öffnet?Ich bin mir nicht sicher, wie ich eine Datei schreibgeschützt öffnen kann (falls jemand es weiß, melden Sie sich bitte), aber hier sind einige Ideen, die Ihnen bei der Lösung Ihres Problems helfen könnten:
- Ändern Sie die Dateiberechtigungen, sodass die meisten Benutzer nur Lesezugriff auf diese Datei haben.
- Machen Sie den Codeabschnitt, in dem die Datei geöffnet werden muss, kurz und einfach und schließen Sie ihn in einen Try-Block ein.Fügen Sie nach dem Try-Block, der die Dateivorgänge verarbeitet, oder im Abschnitt „catchExpr“ Code zum Schließen der Datei ein.Zum Beispiel:
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);