Cómo se realiza esta conversión de JSL a base 36 en Python.
txt = Hex( (Today() - Informat( "01/01/1970", "mm/dd/yyyy" ) - In Hours( 8 )) * 1000 + 600000 + Day( Today() ), base( 36 ) );
a = Today();
b = Informat( "01/01/1970", "mm/dd/yyyy" );
c = In Hours( 8 );
d = Day( Today() );
e = (a - b - c) * 1000 + 600000 + d;
f = Hex( (a - b - c) * 1000 + 600000 + d, base( 36 ) );
Le pregunté a ChatGPT varias veces y los resultados fueron inconsistentes con los resultados de JSL.Solicite ayuda únicamente a expertos que estén familiarizados con JSL y Python.¡Muchas gracias!
Automatización y scriptingVentanasRe: Cómo se realiza esta conversión de JSL a base 36 en Python.¿Con qué parte tienes problemas? ¿Con la construcción del número para convertir? ¿O con la conversión?
Re: Cómo se realiza esta conversión de JSL a base 36 en Python.¿Es correcta tu comprensión de esta función en JSL?
txt = Hex( (Today() - Informat( "01/01/1970", "mm/dd/yyyy" ) - In Hours( 8 )) * 1000 + 600000 + Day( Today() ), base( 36 ) );
¿Cómo puedes calcular el mismo resultado en Python?
Tampoco entiendo Informat("01/01/1970", "mm/dd/aaaa"). Así que no sabemos dónde está la respuesta de ChatGPT.
Calcula el resultado de un Token, si el cálculo no es correcto, la descarga POST no es posible. De hecho, los cálculos de Python no se pueden descargar.
¡Gracias!
ChatGPT
import datetime
# Step 1: Current time (China's East 8 time zone)
now = datetime.datetime.now()
# Step 2: Date of January 1, 1970
epoch = datetime.datetime(1970, 1, 1)
# Step 3: Calculate the difference in seconds between the current time and January 1, 1970, and subtract 8 hours
time_diff = (now - epoch).total_seconds() - (8 * 3600)
# Step 4: Convert the time difference to milliseconds, add 600,000, and add today's day of the month
milliseconds = time_diff * 1000
e = milliseconds + 600000 + now.day
# Step 5: Convert the result to a base-36 representation
def to_base36(num):
chars = '0123456789abcdefghijklmnopqrstuvwxyz'
base36 = ''
while num > 0:
num, i = divmod(int(num), 36)
base36 = chars[i] + base36
return base36
# Output the base-36 value
result = to_base36(e)
print("Python calculated result:", result)
# Output the current precise timestamp
print("Current timestamp:", now)Re: Cómo se realiza esta conversión de JSL a base 36 en Python.Si no entiendes la primera parte, debes empezar por ahí. En formato convierte una cadena en un datenum JMP utilizando el formato o patrón especificado

En tu caso, es 2082844800. Además, si estás usando JMP, ¿por qué realizarías la conversión en Python? Puedes ejecutar JSL en Python usando run_jsl
Re: Cómo se realiza esta conversión de JSL a base 36 en Python.Búsqueda en Google: Python base36
proporciona lo siguiente para la conversión de base36, incluida una solución de 2 líneas usando numpy.
https://stackoverflow.com/questions/1181919/python-base-36-encoding
Uno de los muchos resultados de búsqueda para Python y base36.
Tenga en cuenta también que la fecha de época de Python es el 1 de enero de 1970. Si obtiene el valor de fecha sin procesar de JMP, la fecha de época es el 1 de enero de 1904. Además, al realizar conversiones de tiempo directas en los segundos, asegúrese de tener en cuenta también los años bisiestos.
Re: Cómo se realiza esta conversión de JSL a base 36 en Python.¿Cómo pasa este JSL en Python a Python?
Simplemente revisaré el tablero de pasta.
¡Gracias!

Re: Cómo se realiza esta conversión de JSL a base 36 en Python.No es necesario utilizar el portapapeles para mover información entre JMP y Python en JMP (le sugiero que lea https://www.jmp.com/support/help/en/18.0/#page/jmp/python.shtml# ).
import jmp
txt = "initial";
print(txt);
jmp.run_jsl("""
txt = "hello world";
Python Send(txt);
""")
print(txt);

Re: Cómo se realiza esta conversión de JSL a base 36 en Python.Yo no soy

Re: Cómo se realiza esta conversión de JSL a base 36 en Python.El problema fundamental que no ves es que el entorno JSL y el entorno Python tienen diferentes alcances de variable. Dentro de JSL, los nombres van al espacio de nombres global cuando Names Default To Here(0); o no se especifica. Están en el espacio de nombres 'aquí' cuando Names Default To Here(1); o están dentro de un espacio de nombres particular si eliges crear otro espacio de nombres a través de JSL. Otras cosas especiales como :age se verifican si son referencias de columna de la tabla de datos actual. Esto está en el lado JSL del límite. En el lado Python, las variables creadas en Python terminan en el diccionario Python del alcance apropiado. En el diccionario globals() para el cuerpo del script. Cada módulo, función, ... tiene su propio diccionario local. Python y JSL no comparten automáticamente las variables entre sí. Esto requiere una acción de tu parte para 'enviar' una variable JSL al entorno Python o 'obtener' un valor Python de regreso al entorno JSL. Para ese propósito, Python Send( v ) toma el valor JSL v y crea una variable Python llamada v con una copia del valor de v. Algunos tipos especiales como tablas de datos y matrices se pasan como una referencia al objeto real en lugar de una copia. Pero la mayoría de los valores se transmiten como una copia. jV = Python Get( pV ) ; Busca la variable pV en el entorno Python y copia el valor a la variable JSL jV.
Como mencionó @jthi , hay mucha documentación de JMP que habla sobre esta funcionalidad. La capacidad send() / get() ha sido fundamental con la integración de Python a partir de JMP 14. Dedique tiempo a explorar nuestra documentación y scripts de muestra. El índice de scripts que se encuentra en el menú Ayuda es documentación JMP incorporada para JSL y Python. Dentro del índice de scripts, "Todas las categorías" muestra todo, con un campo de búsqueda al lado. La búsqueda de Python mostrará rápidamente toda la funcionalidad de JSL Python con descripciones y ejemplos ejecutables. Si eligió la categoría "Python", se filtra para mostrar toda la nueva funcionalidad JMP 18+ compatible con el entorno Python. Aquí encontrará descripciones y ejemplos ejecutables que muestran la funcionalidad del lado de Python JMP 18+ de la integración. Por último, desde el entorno Python, se han utilizado cadenas de documentación para que pueda usar la funcionalidad de ayuda incorporada de Python. help( jmp.DataTable ) por ejemplo



Como habrás descubierto, la flexibilidad de los paquetes de Python te permite crear tus propias formas de pasar datos. Dedicar tiempo a leer nuestra documentación y a los ejemplos que te proporcionamos, jugar con ellos y aprender cómo funcionan te ayudará a entender mejor cómo utilizar la integración de Python de JMP.
Aparte de eso, usar Chat GPT u otras herramientas de IA para escribir código solo es verdaderamente útil si sabes cómo se supone que debe funcionar el código. Es como confiar en el artículo de un sitio web: necesitas saber lo suficiente sobre cómo funcionan las cosas (Python, JSL, etc.) para tener una idea de si el código que obtienes es preciso, casi funcional, tiene los conceptos correctos o es simplemente una completa desinformación. Finalmente, es probable que el conocimiento de IA sobre la integración actual de JMP 18+ con Python sea mucho menor que la información sobre JMP 14-17 simplemente debido a la novedad de JMP 18. Estoy seguro de que la mejor fuente de información es nuestra documentación, nuestro índice de scripts y los directorios $SAMPLE_SCRIPTS incluidos.
Re: Cómo se realiza esta conversión de JSL a base 36 en Python.Agradecer Pablo !

Re: Cómo se realiza esta conversión de JSL a base 36 en Python.¡Gracias expertos!
DE ACUERDO

Re: Cómo se realiza esta conversión de JSL a base 36 en Python.Tengo dos preguntas para los expertos:
1. ¿Cómo concatenar dos tablas JMP en Python?
2, ¿cómo se puede modificar el siguiente Python al formato de ejecución asincrónica de Python asyncio?
¡Gracias expertos!
import jmputils
import jmp
from datetime import datetime, timedelta
today = datetime.today()
dates = []
for i in range(200):
dates.append((today - timedelta(days=i)).strftime('%Y%m%d'))
j = 0
for date in dates:
#print(date)
j += 1
jmp.run_jsl('''
b=Python Get(date);
d1=New Table("o",Add Rows(1),New Column("date",Set Values({b})));
Python Send(d1)
''')
#print(d1)
jmp.run_jsl('''
j=Python Get(j);
//b=Python Get(d1);
if(j==1,d2=d1;d2<<SETNAME></SETNAME><SPAN class="">Todavía no tengo una respuesta.</SPAN><SPAN class="">Esperando ayuda experta.</SPAN>
Re: Cómo se realiza esta conversión de JSL a base 36 en Python.Le pregunté a ChatGPT varias veces y el marco asyncio de Python está escrito así
Pero la ejecución siempre resulta infructuosa.
Pide ayuda de expertos en tu comunidad.
¡Gracias!
import asyncio
import concurrent.futures
import jmp
# Define a global variable kk
kk = 1
# Create an asynchronous function to run the JSL script
async def run_jsl_script():
global kk
loop = asyncio.get_event_loop()
# Simplified JSL script
jsl_script = f'''
Print("Value of kk: {kk}");
b = Python Get({kk});
Print("Value of b: ", b);
d1 = New Table("o", Add Rows(1), New Column("date", Set Values({{b}})));
if (b == 1,
d2 = d1;
d2 << Set Name("Name 2");
Print("Table d1 copied to d2 with new name.");
,
current data table(d2);
d2 << Concatenate(Data Table(d1), Append to first table);
Close(d1, nosave);
);
Python Send(d1);
'''
# Print the JSL script content for debugging
print("JSL script to be executed:")
print(jsl_script)
try:
# Use a thread pool to run the synchronous JSL script
with concurrent.futures.ThreadPoolExecutor() as pool:
# Call jmp.run_jsl function
await loop.run_in_executor(pool, lambda: jmp.run_jsl(jsl_script))
except Exception as e:
print(f"Error occurred: {e}")
# Update the kk variable
kk += 1
print(f"Current value of kk: {kk}")
# Main asynchronous function
async def main():
# Example of running the JSL script multiple times
for _ in range(3): # For example, run three times
await run_jsl_script()
print("All JSL scripts executed.")
# Run the main function
if __name__ == "__main__":
asyncio.run(main())