JSL para copiar y pegar columnas como si hiciera clic derecho en una columnaHola a todos,
Estaba revisando el índice de secuencias de comandos y no pude encontrar ninguna referencia sobre cómo crear secuencias de comandos en las opciones de copiar columnas y pegar columnas.

El registro registrará la parte pasada, pero no la parte copiada.
Parece que la parte de pegar simplemente crea una nueva fórmula con el mismo nombre y luego pega las propiedades copiadas de la columna copiada (estoy tratando de copiar varias columnas de fórmulas más suaves de una tabla de datos a otra)
// Paste columns
Data Table("UBS") << New Column("Smoother(UBS Temp)", Numeric, "Continuous", Format("Best", 12), Formula(Entonces, parece que tendré que realizar un bucle para obtener los nombres de las columnas, crear nuevas columnas en la nueva tabla, renombrarlas y luego copiar y pegar las propiedades de las columnas.
A menos que alguien tenga una idea mejor (¡y estoy seguro que la habrá!)
Gracias por cualquier aportación.
Steve
Automatización y scriptingRe: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columna¿Qué estás intentando hacer? Si solo deseas copiar valores de caracteres (no las propiedades de la columna), utilizaría la función Join o la subexpresión de la tabla de datos. Además, asegúrate de que la columna a la que estás copiando los valores sea de tipo Carácter.
Re: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columnaEste comando no parece funcionar con valores de cadena, pero no encuentro otra forma de copiar y pegar caracteres de una columna. ¿Existe otra forma de hacerlo con caracteres?
Re: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columnaCopiar propiedades de columna + Pegar propiedades de columna se puede usar para múltiples columnas, por lo que podrían ser dos líneas si desea usarlas (lo más probable es que no lo haga y use el script << get y haga un bucle sobre las columnas)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Tiretread.jmp");
dt2 = New Table("test it",
New Column("T1", numeric, continuous),
New Column("T2", numeric, continuous),
New Column("T3", numeric, continuous),
Add Rows(10)
);
dt << Copy Column Properties({:MODULUS, :ELONG});
dt2 << Paste Column Properties({:T1, :T3});
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-729552" slang="en-US" mode="CREATE">Re: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columna</LINGO-SUB><LINGO-BODY id="lingo-body-729552" slang="en-US" mode="CREATE"><P>Ambas soluciones funcionaron muy bien. ¡Gracias <A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/26800" target="_blank">@hogi</A> y <A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/14366" target="_blank">@jthi</A> !</P><P> </P><P>Tendré que crear un bucle para trabajar a través de mis columnas para transferirlas, por lo que aún no es tan elegante como si tuviera una sola línea de elemento de JSL que imitara la copia y otra para pegar las columnas seleccionadas, pero al menos ahora puedo llegar allí.</P><P> </P><P>¡Gracias de nuevo!<BR /><BR /></P><P>Steve</P></LINGO-BODY><LINGO-SUB id="lingo-sub-729541" slang="en-US" mode="CREATE">Re: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columna</LINGO-SUB><LINGO-BODY id="lingo-body-729541" slang="en-US" mode="CREATE"><P>Si se trata solo de la fórmula, puede usar <FONT face="courier new,courier"><< obtener fórmula</FONT> y luego usar la expresión devuelta para crear la columna en la segunda tabla:<BR /><BR /></P><PRE><CODE class=" language-jsl">Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "A",
Format( "Best", 12 ),
Formula( :weight - :height )
);
myformula =:a << get formula;
dtnew = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
Eval(Eval Expr(dt new << new column ("A", Formula(Expr(Name Expr(myformula))))))
Re: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columnaPrefiero usar la función Send() en lugar de usar << en casos como este
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
newcol = dt << New Column("ABC", Numeric, Continuous, Formula(:height * :weight));
colscript = Column(dt, "ABC") << get script;
Eval(EvalExpr(
Send(dt, Expr(NameExpr(colscript)))
));
También puedes usar las propiedades de la columna Copiar/Pegar mediante scripts, pero yo usaría << obtener script ya que es más claro lo que debe hacer y no estropeará el portapapeles.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
newcol = dt << New Column("ABC", Numeric, Continuous, Formula(:height * :weight));
dt << Copy Column Properties({:ABC});
dt << New Column("ABCD");
dt << Paste Column Properties({:ABCD});
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-729458" slang="en-US" mode="CREATE">Re: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columna</LINGO-SUB><LINGO-BODY id="lingo-body-729458" slang="en-US" mode="CREATE"><P>Oh... esto es más complicado de lo que pensaba.</P><P> </P><PRE><CODE class=" language-jsl">my new table << myscript
no funciona...
Entonces uno tiene que preparar el mensaje mediante:
Eval (EvalExpr(dt << Expr(Name Expr(myscript))))
o
Eval(Substitute(Expr(dt << _message_), Expr(_message_), Name Expr(myscript)))
o cambiar la tabla de datos actual antes de ejecutar el script:
current data table( my new table);
myscript
Re: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columnaGracias por la sugerencia @hogi , probablemente sea una pregunta tonta, pero ¿cuál sería el siguiente paso? Intenté usar la función de pegar propiedades de columna una vez que obtuve el script de la columna de referencia, pero eso no pareció funcionar. ¡Agradecería cualquier sugerencia sobre el siguiente paso!
Steve
Re: JSL sobre cómo copiar y pegar columnas como se puede hacer haciendo clic derecho en una columnaPuedes preguntar en la columna: lo mismo es posible para muchos más objetos:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "A",
Format( "Best", 12 ),
Formula( :weight - :height )
);
myscript = :A << get script()