Zitate innerhalb des Ausdrucks<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Angenommen, ich möchte eine große Anzahl von Tabellen verketten, die alle dasselbe Format haben. Ich hätte gerne einen einzigen Aufruf zur Verkettungsfunktion und nicht eine Schleife, um jeweils eine Datentabelle zu verketten. Das liegt daran, dass ich Ausdrücke in JMP lernen möchte.
Ich möchte so etwas haben
Datentabelle("dt1") << verketten(Datentabelle("dt2"),Datentabelle("dt3"),…, Datentabelle("dt100"))
In diesem Beispiel erstelle ich Kopien derselben Beispieldaten, stelle mir aber vor, dass sie aus verschiedenen Quellen stammen und unterschiedliche Werte enthalten könnten.
alle schließen ( Datentabellen , nicht sparen ) ;
dt1 = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" ) ;
N = 100 ;
/*In dieser Schleife kopiere ich die Datentabelle und erstelle einen String, mit dem Ziel, ihn in der Verkettungsfunktion zu verwenden*/
/*Ich verwende das Escape-Zeichen, weil ich doppelte Anführungszeichen habe*/
dt_string = "" ;
zum ( ich = 2 , ich <= N , ich ++,
dt_tmp = ( dt1 << Teilmenge ( alle Reihen , alle Spalten , unsichtbar )) ;
dt_name = "dt" || verkohlen ( ich ) ;
dt_tmp << Name einsetzen ( dt_name ) ;
wenn ( dt_string == "" ,
dt_string = "Datentabelle(\!"" || dt_name || "\!")" ;,
dt_string = dt_string || ", Datentabelle(\!"" || dt_name || "\!")" ) ;
) ;
Show ( dt_string ) ;
concat_expr = Ausdruck ( dt1 << verketten ( dt_liste )) ;
Show ( concat_expr ) ;
concat_expr2 = Ersatz ( Namensausdruck ( concat_expr ) , Ausdruck ( dt_liste ) , dt_string ) ;
Show ( concat_expr2 ) ;
auswerten ( concat_expr2 ) ;
Und mein Problem ist, dass ich immer noch das Escape-Zeichen im Ausdruck habe und seine Auswertung fehlschlägt.
Könnten Sie bitte einen Code vorschlagen, um den richtigen Ausdruck zu konstruieren?
Danke im Voraus.
JF
Re: Anführungszeichen innerhalb des AusdrucksUm es klar zu sagen, der gesamte Code, den ich bis einschließlich 'Show(tbls)' angeboten habe, war nur eine schnelle Möglichkeit, eine Liste von Tabellen zu erstellen, die Sie zum Verketten füttern können.
Aber wenn Sie Dinge unsichtbar machen wollen, können Sie Folgendes tun:
// Öffne eine Tabelle
dt1 = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" ) ;
dt1script = dt1 << getScript ;
Drucken ( dt1script ) ;
Einfügen in ( dt1script , Ausdruck ( Unsichtbar )) ;
Drucken ( dt1script ) ;
was zufälligerweise ein einfaches Beispiel dafür ist, wie Sie Ausdrücke manipulieren können.
Re: Anführungszeichen innerhalb des AusdrucksDanke euch beiden für die Antworten. Mir war nicht bewusst, dass wir Listen zur Verkettung von Funktionen bereitstellen können.
Die Antwort von MS war genau das, wonach ich gesucht hatte. Ich war ganz in der Nähe.
Unten ordne ich die beiden Optionen an, um die Wirksamkeit der Saite mit der Liste zu vergleichen.
Die Zeichenfolgenoption dauert 2,85 Sekunden und die Listenoption 4,38 Sekunden.
Wir können den Code beschleunigen, indem wir die Datentabelle unsichtbar machen. Mit der Subset-Funktion kann ich die Unsichtbar-Option einfach hinzufügen. Aber mit dem getscript weiß ich nicht wie das geht.
dt1 = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" ) ;
N = 100;
Start = HP-Zeit () ;
dt_string = "" ;
zum ( ich = 2 , ich <= N , ich ++,
dt_tmp = ( dt1 << Teilmenge ( alle Reihen , alle Spalten )) ;
dt_name = "dt" || verkohlen ( ich ) ;
dt_tmp << Name einsetzen ( dt_name ) ;
wenn ( dt_string == "" ,
dt_string = "Datentabelle(\!"" || dt_name || "\!")" ;,
dt_string = dt_string || ", Datentabelle(\!"" || dt_name || "\!")" ) ;
) ;
Show ( dt_string ) ;
concat_expr = Ausdruck ( dt1 << verketten ( dt_liste )) ;
Show ( concat_expr ) ;
concat_expr2 = Ersatz ( Namensausdruck ( concat_expr ) , Ausdruck ( dt_liste ) , parsen ( "{" || dt_string || "}" )) ;
Show ( concat_expr2 ) ;
auswerten ( concat_expr2 ) ;
Zum ( ich = 2 , ich <= N , ich ++, Nah dran ( Datentabelle ( "dt" || verkohlen ( ich )) , NeinSpeichern )) ;
Ende = HP-Zeit () ;
Lösung1 = ( Ende - Start ) / 1e6 ; /*Sekunden statt Mikrosekunden*/
Start = HP-Zeit () ;
dt1script = dt1 << getScript ;
Esslöffel = {} ;
Zum ( ich = 2 , ich <= N , ich ++,
Bewertung ( dt1script ) ;
Einfügen in ( Esslöffel , Datentabelle ( „Große Klasse“ || Verkohlen ( ich ))) ;
) ;
Zeigen ( Esslöffel ) ;
dt1 << Verketten ( Esslöffel ) ;
Zum ( ich = 1 , ich <= NIArtikel ( Esslöffel ) , ich ++, Nah dran ( Esslöffel [ ich ] , NeinSpeichern )) ;
Ende = HP-Zeit () ;
Lösung2 = ( Ende - Start ) / 1e6 ; /*Sekunden statt Mikrosekunden*/
Re: Anführungszeichen innerhalb des Ausdrucks(Bitte vermeiden Sie das Posten von Codes wie alle schließen ( Datentabellen , nicht sparen ) ; Ich war unvorsichtig und konnte zuerst nicht verstehen, was mit all meinen offenen Fenstern passiert war)
Sieht so aus, als ob Sie eine Mischung aus Ausdrücken und Zeichenfolgen erhalten. Irgendwann muss der String in ausführbaren Code zerlegt werden (in diesem Fall vorzugsweise eine Liste).
Ihr Code sollte gut funktionieren, wenn Sie die ändern concat_expr2 Zuordnung dazu:
concat_expr2 = Ersatz ( Namensausdruck ( concat_expr ) , Ausdruck ( dt_liste ) , analysieren ( "{" || dt_string || "}" )) ;
Ich schlage jedoch einen einfacheren Ansatz vor: Überspringen Sie die Zeichenfolge und erstellen Sie direkt eine Liste.
dt1 = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" ) ;
N = 10 ;
dt_liste = {} ;
Zum ( ich = 2 , ich <= N , ich ++,
dt_tmp = dt1 << Teilmenge ( alle Reihen , alle Spalten , unsichtbar ) ;
Einfügen in ( dt_liste , dt_tmp ) ;
) ;
dt1 << verketten ( dt_liste ) ;
Re: Anführungszeichen innerhalb des AusdrucksNachdem ich es zweimal gelesen habe, denke ich, dass Ihr 'Verketten'-Problem nur ein Beispiel ist, damit Sie sich mit der Verwendung von Ausdrücken befassen können.
Wenn nicht, beachten Sie bitte, dass '<< Concatenate()' eine Liste von Tabellen verwendet, sodass Sie sich nicht mit ihnen herumschlagen müssen, wenn Sie einfach nur die Arbeit erledigen möchten:
NamesDefaultToHere ( 1 ) ;
// Öffne eine Tabelle
dt1 = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" ) ;
dt1script = dt1 << getScript ;
// Einige Kopien erstellen
n = 4 ;
Esslöffel = {} ;
Zum ( ich = 1 , ich <= n , ich ++,
Bewertung ( dt1script ) ;
Einfügen in ( Esslöffel , Datentabelle ( „Große Klasse“ || Verkohlen ( ich + 1 ))) ;
) ;
Zeigen ( Esslöffel ) ;
// Kopien mit der ersten Tabelle verketten - Sie können die Tabellenliste tbls verwenden
dt1 << Verketten ( Esslöffel , AppendToFirstTable ) ;
// Alle außer der ersten Tabelle schließen
Zum ( ich = 1 , ich <= NIArtikel ( Esslöffel ) , ich ++, Nah dran ( Esslöffel [ ich ] , NeinSpeichern )) ; .