<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich hatte gerade eine Anfrage nach einer Möglichkeit, Daten aus einem externen Programm in JMP zu verschieben.Im Allgemeinen würde ich dafür CSV-Dateien empfehlen, aber wenn die Komprimierung ein Problem darstellt, ist möglicherweise etwas anderes erforderlich.Hier sind ein paar Proof-of-Concept-Skripte ( Sie müssen sicherstellen, dass sie das tun, was Sie brauchen ).Da ich kein externes Programm habe, besteht jedes Skript aus zwei Teilen: Erstellen Sie eine ZIP-Datei aus einer Tabelle und erstellen Sie dann die Tabelle aus der ZIP-Datei neu.Dies setzt voraus, dass Sie die Kontrolle darüber haben, wie ein externer Prozess die Daten verpacken und JMP präsentieren könnte.
Wichtige Punkte: ZIP-Dateien können binäre (erstes Beispiel) oder druckbare (zweites Beispiel) Daten enthalten.Jsl MatrixToBlob und BlobToMatrix sind schnell.Machen Sie keine Schleife oder durchlaufen Sie nur ein paar Spalten.Vermeiden Sie es, für viele Zeilen eine Schleife für jede Zeile durchzuführen.Die ZIP-Datei-API von JMP hängt neue Mitglieder an und ändert möglicherweise die tatsächlicher Name Um frühere Mitglieder zu vermeiden, beachten Sie die Funktion deleteFile().Das Löschen der Postleitzahl (za=0) ist NICHT erforderlich; Dies deutet darauf hin, dass sich die Datei außerhalb von JMP (auf der Festplatte) befindet.Das Konvertieren von Zahlen in druckbare Werte und zurück ist langsam und kann auch verlustbehaftet sein, wenn die formatierten Werte nicht genügend Ziffern enthalten.
Das erste Skript fügt Rohdaten zeilenweise in ein Zip-Dateimitglied im „Little-Endian“-Format ein.Schnell, da keine Konvertierung hin und her in eine druckbare Datei möglich ist.
Das zweite Skript fügt formatierte Daten für eine Spalte in ein ZIP-Dateimitglied ein, eine Spalte pro Mitglied.Numerische Daten werden in einer Matrix gespeichert, Zeichen in einer Liste.
Sie können Ideen aus beiden Skripten kombinieren.
Beispiel 1
In diesem Beispiel werden binäre numerische Daten angenommen.Es sollte wirklich so sein schnell .Charakterdaten funktionieren so nicht ...
// (dieser Code ist ungetestet!) Erstelle numerische Beispieldaten
dt = Neuer Tisch ( "Menschen" , Zeilen hinzufügen ( 1e7 ) ,
Neue Spalte ( „Fred“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Formel ( Zufällig normal () ) ) ,
Neue Spalte ( „Ralph“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Formel ( Zufällig normal () ) ) ,
Neue Spalte ( "George" , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Formel ( Zufällig normal () ) , )
) ;
// Beispiel-ZIP-Datei mit Binärdaten erstellen
Datenmat = ( dt : Fred << getasmatrix ) || ( dt : Ralph << getasmatrix ) || ( dt : George << getasmatrix ) ;
Blobmat = Matrixtoblob ( Datenmat , "schweben" , 8 , "wenig" ) ;
za = offen ( „$temp/deleteme2.zip“ , "Reißverschluss" ) ;
tatsächlicher Name = za << schreiben ( "Daten" , Blobmat ) ;
// klarer Reißverschluss
za = 0 ;
// zip erneut öffnen
za = offen ( „$temp/deleteme2.zip“ , "Reißverschluss" ) ;
zeigen ( za << dir ) ; // Mitglieder prüfen
Start = Ticksekunden () ;
Blobextrakt = za << lesen ( tatsächlicher Name , Format ( Klecks )) ;
Datenextrakt = Blobtomatrix ( Blobextrakt , "schweben" , 8 , "wenig" , 3 /*Säulen*/ ) ;
dtexttract = neuer Tisch () ;
dtexttract << setmatrix ( Datenextrakt ) ;
stoppen = Ticksekunden () ;
zeigen ( stoppen - Start ) ;
Stopp - Start = 2.01666666666279; // 10.000.000 Zeilen x 3 Spalten in 2 bis 3 Sekunden dekomprimiert + geladen
Beispiel 2
Hier ist eine andere Variante, aber langsamer flexibel (behandelt Zahlen und Zeichen):
// (Dieser Code ist ungetestet!) Erstellen Sie numerische Beispieldaten
dt = Neuer Tisch ( "Menschen" , Zeilen hinzufügen ( 1e6 ) ,
Neue Spalte ( „Fred“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Formel ( Zufällig normal () ) ) ,
neue Kolumne ( „Fred Char“ , Charakter , Formel ( verkohlen ( Zufallszahl ( 1000 , 99999 )))) ,
Neue Spalte ( „Ralph“ , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Formel ( Zufällig normal () ) ) ,
neue Kolumne ( „ralph char“ , Charakter , Formel ( verkohlen ( Zufallszahl ( 1000 , 99999 )))) ,
Neue Spalte ( "George" , Numerisch , Kontinuierlich , Format ( "Am besten" , 12 ) , Formel ( Zufällig normal () ) , ) ,
neue Kolumne ( „George Char“ , Charakter , Formel ( verkohlen ( Zufallszahl ( 1000 , 99999 ))))
) ;
dt << Laufformeln () ;
// Beispiel-ZIP-Datei mit Binärdaten erstellen
versuchen ( Datei löschen ( „$temp/deleteme.zip“ )) ;
za = offen ( „$temp/deleteme.zip“ , "Reißverschluss" ) ;
collist = dt << getcolumnreference ;
für ( ich = 1 , ich <= nitems ( collist ) , ich ++,
Daten = collist [ ich ] << getasmatrix ;
Name = collist [ ich ] << getname ;
za << schreiben ( Name , verkohlen ( Daten )) ;
) ;
// klarer Reißverschluss
za = 0 ;
// zip erneut öffnen
Start = Ticksekunden () ;
za = offen ( „$temp/deleteme.zip“ , "Reißverschluss" ) ;
Kolnamen = za << dir ; // Mitglieder prüfen
dtexttract = neuer Tisch ( „extrahiert“ ) ;
für ( ich = 1 , ich <= nitems ( Kolnamen ) , ich ++,
txt = za << lesen ( Kolnamen [ ich ]) ;
dtexttract << neue Spalte ( Kolnamen [ ich ] , Werte ( analysieren ( txt ))) ;
) ;
stoppen = Ticksekunden () ;
zeigen ( stoppen - Start ) ;
Stopp - Start = 12.3500000000349; // 1.000.000 x 6 in 12 bis 14 Sekunden dekomprimiert+geladen