
Esta demostración ilustra cómo usar la función For para la iteración. Hasta ahora, hemos usado el Editor de Scripts con el registro para probar nuestros scripts y observar los resultados. Ahora, veremos esto usando el depurador. Tengo abierta la ventana del editor de scripts y empezaré escribiendo "Nombres predeterminados aquí". Pondré el valor booleano (no voy a añadir espacios). Escribiré todo en una sola línea y dejaré que el reformateo automático lo limpie. Escribiré un punto y coma, luego "For", paréntesis de apertura, a = punto y coma, b = punto y coma, i = coma... inicializando así tres variables. Después, escribiré la prueba, que es "i menor que coma", y actualizaré tanto "b" como "i". Entonces b se actualizará-- b+ igual Entonces esa es la función de asignación en el lugar, la función agregar a, que sobrescribirá el valor actual de b y lo incrementará en un punto y coma porque estoy actualizando dos cosas, y luego i++, ese ++, nuevamente, es el operador posterior al incremento que agrega a i en su lugar. Y luego una coma, y luego el cuerpo de este bucle simple será la función Mostrar. Y solo mostraré a, coma, b, coma-- y luego invocaré la función de multiplicación usando el operador-- entonces a por b. Y luego cerraré todos mis paréntesis, agregaré ese punto y coma, y haré clic derecho y Reformatear. Ahora una cosa-- bueno, dos cosas para notar aquí-- una es que JMP agregó algunos puntos y comas adicionales para mí. Vio que estaba pegando funciones juntas en este primer argumento. Vio que estaba pegando funciones juntas en el tercer argumento. Y entonces agregó estos puntos y comas. No duelen. En la práctica, probablemente los eliminaría de mi script, ya que no son necesarios a menos que vaya a añadir o unir más funciones. Otra cosa que podría hacer es reorganizar esto para que cada argumento tenga su propia línea. Pero quiero que coincida con lo que tengo en el PDF del curso al acceder al depurador. Así que lo dejaré como lo reformuló JMP, excepto por eliminar los puntos y comas. Hay varias maneras de iniciar el depurador. Puedes ir al menú Editar y hay una opción "Depurar script". Puedes ver que el atajo de teclado es Ctrl+Mayús+R. Puedes hacer clic en el botón Depurar de la barra de herramientas, aquí en la ventana del Editor de scripts. O puedes hacer clic derecho y seleccionar "Depurar script". Y como este es el último que les muestro, usaré ese método. Este depurador es una segunda instancia de JMP. Y la instancia original de JMP está temporalmente suspendida. Si tu script requiere alguna interacción, como un cuadro de diálogo, la ventana del depurador se suspenderá hasta que realices esa acción. Una vez completado el proceso, el control regresa al depurador. Una vez que hayas terminado con el depurador, simplemente ciérralo. Puedes usar la X en la esquina superior derecha o el botón Detener de la barra de herramientas. Esto te regresará a la instancia original de JMP. Para empezar, ejecutaré este bucle tal cual, sin puntos de interrupción. Hay dos botones: "Ejecutar" y "Ejecutar sin puntos de interrupción". Como no tengo puntos de interrupción ahora mismo, estos harán lo mismo. Si tengo puntos de interrupción que quiero usar ahora, usaré este botón del extremo izquierdo. Haré clic en él. Esto me avisa de que la ejecución del programa ha finalizado a menos que reinicie, lo cual haré en breve. La única opción es cerrar el depurador. Pero antes de reiniciar, quiero ir a la pestaña Locales aquí abajo en el panel donde se muestra el script. Y el espacio de nombres predeterminado es Aquí, que es lo que invoqué en línea. Y pueden ver que al final de la ejecución del script, el valor de a es El valor de b es Y el valor de i es Así que ahora quiero usar el depurador para ver los valores de a, b e i en cada paso de la iteración. Así que voy a hacer clic en el botón Reiniciar. Y quiero agregar un punto de interrupción en línea Y para ello, hago clic justo a la derecha del número de línea. Y pueden tener tantos puntos de interrupción como quieran. En este script simple, realmente solo necesitamos uno. Así que lo que eso significa es que vamos a evaluar línea y establecer ese espacio de nombres Aquí. Y luego, dentro del bucle for, evaluaremos el argumento de inicialización. Evaluaremos la prueba. Evaluaremos el cuerpo del bucle for, que es simplemente la función Mostrar. Y luego haremos una pausa, y veremos los valores en la pestaña Locales. Permítanme volver a eso. Y luego, al hacer clic en Ejecutar de nuevo, actualizaremos, realizaremos la prueba, ejecutaremos el cuerpo, haremos una pausa y veremos esos valores. Y continuaremos haciendo eso hasta que la prueba falle y salgamos del bucle. Así que no quiero tener nada seleccionado. Y usaré el botón Ejecutar de la izquierda. De nuevo, no quiero ejecutarlo sin puntos de interrupción. Así que ejecutaré esto. Y pueden ver que nos hemos detenido en la línea después de evaluar eso. Y los valores de a, b e i son y respectivamente. Para ejecutar a través del siguiente paso de la iteración, hago clic en el botón Ejecutar de nuevo. Y ahora veo que los valores de a, b e i son y respectivamente. Y puedo ejecutar una vez más. Y llegamos a los valores finales de a, b e i. Y recibo el mensaje de que la ejecución del programa ha terminado. Y puedo reiniciar si quiero hacer algo más. Puedo hacer clic en el botón Detener. O podría cerrar usando la X en la esquina superior derecha. Y haré clic en el botón Detener. Esto retornará el control a mi sesión original de JMP. Imaginemos que medimos el tiempo de curado de un compuesto en producción. Cada ejecución se muestrea cinco veces durante la producción y determinamos este tiempo de curado para cada muestra. Queremos observar la distribución de los tiempos de curado para cada muestra. En el Diario del curso, en la sección Datos de tiempo de curado, haré clic en Datos de tiempo de curado. Una de las cosas que recomendamos al crear scripts es probar cosas de forma interactiva para asegurarse de que lo que se intenta hacer sea factible. Quiero histogramas para Tiempo de curado... Para empezar, voy a hacer un ejemplo sencillo. Voy al menú Analizar, selecciono Distribución. Pondré Tiempo de curado en el rol Y. Recuerda que el rol aquí es Y. Haré clic en Aceptar. Viendo esto, pienso: "Genial. Es exactamente lo que quiero para mis cinco distribuciones de tiempo de curado". Esa es la plataforma que quiero usar. Creé una pequeña plantilla de script que recrearía este informe. Regresaré a la ventana de inicio y la abriré. Este script, con el lanzamiento de la plataforma de distribución, el rol Y y la función de columna con "Tiempo de Curado" como cadena de caracteres, recreará el informe. Escribiré un bucle basado en esta plantilla. Cerraré la ventana "Tiempo de Curado", volveré al editor de scripts y borraré el contenido para poder usar la misma ventana. Comenzaré el script con "Nombres predeterminados aquí". Como antes, dejaré que JMP limpie el script automáticamente con el reformateo. Mi bucle for comenzará con el argumento "c". Asignaré el valor "c". Esa es la única variable que inicializaré. Escribiré una coma. La prueba será "c menor que igual al número de columnas". Y solo un recordatorio de que una buena práctica, si estás trabajando con una tabla de datos grande, potencialmente, sería contar el número de columnas fuera del bucle, almacenar ese resultado en una variable y luego hacer que esa variable sea con la que estás comparando c. En este caso, son cinco columnas porque estamos empezando con la segunda. Son cinco columnas en total. Así que no me preocupa demasiado rehacer este recuento cada vez. Pero una buena práctica sería sacar eso. Escribiré una coma después de eso. El argumento de actualización será solo c y el operador de post-incremento, los dos signos más, otra coma, y luego escribiré Distribución entre paréntesis, y, abriré paréntesis de nuevo, escribiré columna, y luego simplemente pondré c (el contador) entre esos paréntesis. Y voy a mover la flecha ahora solo para asegurarme de que todos mis paréntesis coincidan. De hecho, si me faltara un paréntesis de cierre e intentara reformatear, recibiría un mensaje indicando que faltaba algo. Reformatear es una forma sencilla de depurar. Escribo el punto y coma. Luego, uso el botón "Reformatear script". Y luego ejecuto el script. Con el script escrito así, obtengo una ventana independiente para cada observación de los valores de tiempo de curado, ya que estoy iniciando la distribución (si volvemos a la ventana del Editor de scripts), estoy iniciando la plataforma de distribución en cada paso de la iteración. Si están familiarizados con la distribución (regresaré al menú Analizar, seleccionaré "Distribución" y asignaré los cinco valores de tiempo de curado a la función Y), sabrán que pueden tenerlos todos en la misma ventana. En el Diario, hay un script preescrito que se ejecuta en bucle para crear la función Y con todos los nombres de columna y generar el mismo informe con las cinco distribuciones en la misma ventana. Antes de empezar, quiero cerrar todas las ventanas de informes. Voy a la barra de menú y, en Ventana, seleccionar "Cerrar todos los informes". Luego, buscaré el Diario. Haré clic en el script "Distribuciones de tiempo de curado". Lo revisaremos en el Depurador. Explicaré lo que sucede en cada paso en el entorno del Depurador, en lugar de en la ventana del Editor de scripts. Haré clic derecho y seleccionaré "Depurar script". Recuerden que hay varias maneras de iniciar el Depurador. Quiero añadir un punto de interrupción en la línea para ver qué sucede en cada paso de la iteración, como hicimos en el ejemplo simple anterior. También quiero añadir una vigilancia en las variables "c" y "yCol". Así que voy a ir a la pestaña Watch. Y voy a hacer clic en el signo más verde para agregar un watch. Así que esta es una forma de ver variables específicas en mi script. Ahora bien, aquí no tengo muchas variables. Pero si tuvieras un script grande con muchas variables, y solo hay unas pocas que necesitas vigilar mientras estás depurando, usar la pestaña Watch es una gran manera de hacerlo. Así que haré clic en el signo más verde para agregar el watch. Escribiré la variable c y haré clic en OK. Y luego también quiero agregar un watch en la variable yCol Y haré clic en OK. Ahora bien, antes de empezar a ejecutar esto, quiero hablar un poco sobre lo que está sucediendo a lo largo del script. Y luego lo veremos a medida que avanzamos en el proceso de ejecución del depurador. Así que la primera línea está creando una variable llamada yCol. Y yCol va a almacenar el rol de análisis Y de la plataforma de distribución seguido de paréntesis vacíos porque mi bucle va a construir esta expresión añadiendo los nombres de las columnas entre los paréntesis después de ese rol Y. Y lo estoy citando con Expr porque si solo intentaras decir yCol y asignar el valor y con paréntesis después, obtendrías un error porque JMP no reconoce esto como una variable que ha sido definida. No lo reconoce como una función. Entonces solo quiero obtener este valor literal almacenado en yCol sin que JMP intente evaluarlo. Entonces eso es lo que hará la línea. Las líneas a través de son mi bucle for, donde comenzamos con la columna Iteramos hasta que nos quedamos sin columnas. Y nuevamente, en un script de nivel de producción, particularmente si puede haber tablas de datos más grandes, queremos contar el número de columnas fuera del bucle, poner eso en una variable. Y luego el cuerpo del bucle for simplemente agrega la columna c, por lo que la columna esta primera ronda en la expresión almacenada en yCol. E Insert Into no intentará evaluar su primer argumento. No tengo que hacer nada especial con la variable yCol. Simplemente la examina y realiza la operación; en este caso, agrega la columna dentro del paréntesis después de la y. La función "Mostrar" es solo ilustrativa para que podamos ver qué sucede en cada paso. Si no usara el depurador, esa parte aparecería en el registro. Así que controlo los valores, lo que equivale a usar la función "Mostrar". Actualizamos. Probamos y, asumiendo que c sigue siendo menor o igual al número de columnas, insertamos la siguiente columna en yCol. Una vez completado el bucle, es decir, si nos quedamos sin columnas, tenemos una línea de código final, que explicaré detalladamente. Queremos usar la función "Insertar" para modificar la expresión de distribución. Usamos "Insertar" en lugar de "Insertar en" porque la distribución es una versión de la plataforma integrada en JMP. Un usuario no puede modificar la distribución en sí. Podemos modificar una expresión que use distribución. Por lo tanto, usamos "Insertar". Y luego envolvemos la distribución en la función Expr, para que JMP no intente evaluarla. Si ejecuto... solo resaltaré esto... si ejecuto esta línea de código, JMP diría: "Oye, no me has dado el argumento requerido en la función Y". Así que me daría la plataforma de distribución. Y entonces el usuario ingresaría sus columnas, pero no... anularía el propósito de nuestro script, ¿verdad? Ese es el primer argumento. El segundo argumento... si simplemente incluyo yCol como segundo argumento, JMP intentará evaluarlo. Y verá cómo se verá después de completar el bucle. Pero solo verá esa Y mayúscula con paréntesis y un montón de nombres de columnas. Y eso es algo con lo que JMP no sabe qué hacer. No lo reconoce como un nombre de variable ni como una función. Así que Name Expr me permite ver lo que está almacenado y yCol sin intentar evaluarlo. Y esa expresión no evaluada almacenada en yCol es lo que se pondrá entre paréntesis después de la distribución. Entonces, como, una vez que hago eso, la distribución con el rol Y en todas las columnas sigue entre comillas, envolvemos todo en Eval. Y podemos repasar cuando volvamos a la instancia regular de JMP y desglosar eso un poco más. Así que tengo mis relojes. Y actualmente, las variables no están definidas. Así que eso es lo que se muestra como valor. Vamos a ejecutar hasta el primer punto de interrupción. Y así, después de esa primera ejecución antes de actualizar, c está almacenando el valor de Y ahora yCol, en lugar de solo una Y con paréntesis vacíos, tiene Tiempo de Curado de Columna Y recuerda de mi pequeña plantilla que puedes ver en el fondo allí - no puedo navegar hasta ella porque el Depurador está activo - pero eso es lo que produciría esa distribución para solo una columna. Así que ejecutaré de nuevo a través de la siguiente iteración. Ahora c es igual a y el rol de análisis y está iniciando dos columnas de tiempo de curado. Ejecutaré de nuevo. Ahora tenemos tres. Y puedo seguir haciéndolo. Pueden ver en el registro en segundo plano que esos resultados se muestran gracias a la función Show. Así que seguiré haciéndolo hasta que salgamos del bucle. Y las cinco columnas de tiempo de curado están almacenadas (y esto es más fácil de ver en el registro en su sesión habitual de JMP), pero ahora todas están almacenadas en yCol. Por lo tanto, la ejecución del programa ha terminado. Voy a continuar y hacer clic en Detener en el Depurador. Y así, esa última línea ya ha sido evaluada. Y tengo las distribuciones de tiempo de curado con los cinco histogramas en la misma ventana. Ahora volvamos brevemente a la ventana del Editor de Scripts para hablar de esta línea porque creo que es importante pensar en cómo construimos expresiones de adentro hacia afuera. Así que voy a ejecutar esto y crear una serie de errores solo para asegurarme de que esté claro por qué lo escribimos de la manera en que lo hicimos. Así que voy a comentar la línea preescrita. Así que volviendo a cómo lo estaba describiendo cuando estamos en la instancia del depurador, voy a escribir la palabra Insertar. Y si eres nuevo en scripting, puede ser un poco de prueba y error de cuándo usar Insertar, cuándo usar Insertar en. Pero de nuevo, en este caso, estoy tratando de... Necesito lanzar una plataforma con roles de análisis específicos o columnas específicas en el rol de análisis. Pero no puedo modificar una plataforma. Solo puedo modificar variables creadas por el usuario. Esas se llaman valores L. Así que probemos esto. Voy a escribir Distribución para ese lanzamiento, abrir los paréntesis, cerrar los paréntesis, escribir una coma e intentar insertar yCol. De nuevo, estoy llegando a esto desde una perspectiva ingenua de que quiero lo que está almacenado en yCol y los paréntesis después de la distribución. Así que veamos qué sucede cuando ejecuto esta línea. [ERROR CHIME] Obtengo un error, Nombre sin resolver. Y en el acceso o evaluación de Y de todas las columnas. Entonces, si descarto eso, eso solo significa que JMP intentó evaluar esto. No pudo. Entonces obtuvimos un error. Entonces esto no se completó. Entonces, de nuevo, la función que usamos cuando necesitamos recuperar una expresión almacenada o una expresión entre comillas sin evaluarla es Name Expr. Entonces, voy a envolver... oops... paréntesis de apertura. Voy a envolver yCol en Name Expr. Y puedes probar esto. Entonces, ¿qué sucede? Si acabo de ejecutar yCol, viste el error que acabamos de obtener. Si ejecuto Name Expr yCol, entonces puedes ver en el registro... oops, estoy tratando de cambiar el tamaño de esto. Puedes ver en el registro que JMP no me da un error con eso. Simplemente devuelve esa expresión entre comillas. Entonces, ahora cuando intento ejecutar la línea oh, bueno, esta vez, el problema es que... entonces JMP no tuvo un problema con la variable yCol esta vez. Pero ahora vio la distribución sin ese valor requerido. Entonces, no quiero que JMP lance esta plataforma. Cancelaré eso. Quiero encapsular la distribución en Expr, para que JMP no intente evaluarla. De nuevo, puedes resaltarla y ejecutarla solo para probarla; eso no causa ningún problema. Al ejecutar esto, si reviso el registro, está la línea de código que ejecuté. Aquí está el resultado: distribución con un rol Y y todas las columnas que contiene. La última parte, como vieron en la línea, es encapsular todo esto (y esta es solo una forma de hacerlo), pero encapsular toda la línea en la función Eval. Y la ejecuto. Y hay otra ventana de distribución con todos los informes de distribución. Quería repasar algunos errores al desarrollar esto, porque creo que eso ayuda a la gente a entender por qué escribimos estas cosas de esta manera. Otra cosa que quiero mencionar es que, generalmente, recomendamos... cuando hice la primera distribución del tiempo de curado, si recuerdan, fui a Analizar > Distribución, simplemente puse Tiempo de Curado en la función Y y hice clic en Aceptar. Solíamos recomendar que simplemente tomaran el script que JMP escribiría para esto y lo usaran como base, en este caso, para escribir este bucle. Y la única razón por la que no hice eso con las distribuciones es que la sintaxis donde solo tengo la función de análisis y es antigua. Si fuera al triángulo rojo junto a las distribuciones y seleccionara Guardar script en la ventana de script, la sintaxis más reciente especifica si se trata de una distribución continua o nominal individualmente para cada columna. Por lo tanto, se requiere un poco más de scripting en ese bucle que con la sintaxis antigua. La sintaxis antigua funciona bien. Pero probablemente recomendaría usar esta sintaxis más reciente. Es simplemente un bucle un poco más complejo. Sin embargo, con la mayoría de las plataformas, será suficiente usar el script que JMP escribe para nosotros. Voy a cerrar esta ventana de script. Y vamos a ver un ejemplo más de hacer algo de forma interactiva. Esta vez, capturaré ese script. Aunque mi bucle está preescrito. Supongamos que quiero ver los gráficos de control de los cinco valores de tiempo de curado. Y entonces empezaré de forma interactiva yendo a mi menú Analizar. En Calidad y Proceso, seleccionaré Constructor de gráficos de control. Quiero poner Día en ese rol de subgrupo y Tiempo de curado en el rol Y. Y eso automáticamente, el constructor de gráficos de control me da la medición individual y el gráfico de rango móvil de Tiempo de curado Así que ese es mi punto de partida. Voy a hacer clic en Listo para ocultar el Panel de control. Y luego voy a ir al triángulo rojo junto a Constructor de gráficos de control y Guardar script en una ventana de script. Entonces esta ventana del Editor de scripts, esta ventana del Editor de scripts, ahora contiene el Constructor de gráficos de control que recreará ese resultado. Ahora, solo para que coincida con mi script preescrito, voy a eliminar la línea que establece el tamaño. No tienes que hacer esto, por supuesto. Solo lo estoy simplificando para fines de demostración. Entonces, lo que vemos es que el generador de gráficos de control es el lanzamiento de la plataforma. Y luego tenemos algunas opciones. Estamos ocultando el Panel de control usando ese booleano. No estamos mostrando la capacidad. Y luego está este rol de variables. Y el rol de variables tiene un subgrupo. Ese será el mismo para todos los valores de tiempo de curado. Y luego tiene un rol Y con el tiempo de curado, en este caso, Tiempo de Curado. Entonces, lo que realmente necesitamos hacer es construir tres cosas. Necesitamos construir ese rol de análisis y con las columnas de tiempo de curado, construir la parte de variables de esto agregando, una vez que tengamos todas las columnas de tiempo de curado en el rol Y, añadiéndolas aquí. Y luego llevar esa parte de variables al lanzamiento del Generador de gráficos de control. Así que volvamos al diario y hagamos clic en Gráficos de control de tiempo de curado. Entonces, nuevamente, son tres piezas que construyen el rol de análisis y. Y eso es exactamente lo que hicimos; estas líneas son iguales a lo que vimos en distribución. Estoy usando una convención de nomenclatura diferente para las variables. Luego, queremos construir la sección de variables. Para ello, estoy usando la función Insertar. Tengo variables con el subgrupo Día, que será el mismo para todos los valores de tiempo de curado. Pero no quiero que JMP intente evaluar la palabra variables, ya que obtendría un error. Así que usaré Expr. Y luego, al igual que en distribución, en ese script, estoy recuperando la lista de columnas almacenada en yExpr y añadiéndola a la sección de variables. Luego, en este script, estoy construyendo la plantilla básica para el Generador de Gráficos de Control sin la sección de variables y almacenándola en la variable ccExpr. Y finalmente, voy a añadir la línea de variables. De nuevo, si observamos ese código en segundo plano, esa línea de variables se añadirá al inicio del Generador de Gráficos de Control. En este caso, usé Name Expr para ambas, ya que son expresiones entre comillas que ya definí. Guardo el resultado en su propia variable en lugar de incluir esta función de inserción en eval. Luego, uso cc en mi script, lo que evaluará la expresión generada. Ahora, llevemos esto al depurador. Haré clic derecho y seleccionaré Depurar. Iré a la pestaña Inspección. Quiero eliminar las variables de inspección actuales de mis otros scripts, así que haré clic en el botón para eliminar todas las inspecciones. Agregaré cuatro inspecciones para las cuatro variables de este script. Haré clic en el signo más verde. Primero, escribiré yExpr y haré clic en Aceptar. Haré clic de nuevo en el signo más verde y agregaré varExpr. No importa que lo haya escrito en mayúsculas, pero quiero ser coherente con el texto del script. Haré clic en Aceptar. Quiero agregar ccExpr. Haga clic en Aceptar. Y finalmente, quiero agregar cc y haga clic en Aceptar. Voy a poner tres puntos de interrupción porque quiero detenerme en tres ubicaciones diferentes aquí. Entonces, el primer punto de interrupción estará en línea Y eso me permitirá ver qué sucede en cada paso de la iteración. El siguiente punto de interrupción estará en línea Así que haremos una pausa para poder ver qué está almacenado en varExpr. Y luego, finalmente, pondremos un punto de interrupción en línea para ver qué está almacenado en cc. Y luego, una vez que descartemos esto, eso será evaluado. Usaré el botón Step Over para ejecutar el depurador. Entonces hago clic en eso. Y se evalúa la línea y llegamos al bucle. Y si miramos en la pestaña Watch a continuación, puede ver qué está almacenado y yExpr ahora mismo. Y luego, cuando hago clic en Step Over de nuevo, vamos al primer punto de interrupción. Cuando hago clic en Step Over una tercera vez, ahora puede ver que yExpr tiene Column Cure Time. Haré clic en "Recorrer" de nuevo para ir a ese punto de interrupción. Haga clic una vez más. Hemos insertado "Tiempo de Curado" en la función Y. Continuaré haciéndolo hasta que terminemos el bucle for. Si observan esto, verán que las cinco columnas de tiempo de curado están en la función Y. La línea definirá "varExpr". Estas son las variables con el subgrupo "Día" y luego la función Y con todas esas columnas. Haré clic en "Recorrer" de nuevo, lo que nos lleva a donde hemos definido "ccExpr". También pueden ver que en la pestaña "Observar" solo se almacena el inicio del Generador de Gráficos de Control, pero falta una parte vital. La línea es donde unimos todo. Haré "Recorrer" una vez más. Si desean examinar esto, el Generador de Gráficos de Control, Mostrar Panel de Control, etc., tiene los valores almacenados en "varExpr" añadidos. Haré clic en "Recorrer" una vez más. La ejecución del programa finaliza. Haré clic en "Detener". Y ahora, de vuelta a mi... En la sesión de JMP, pueden ver que tengo las gráficas de medición individual y rango móvil para su tiempo de curado, etc. En estos ejemplos, veremos cómo usar la función For, las funciones Expr y Name Expr con Insert, y también cómo usar el depurador en estos contextos simples. Regresaré al Diario y haré clic en Eliminar todo y Guardar ninguno sin guardar los cambios en ninguna de las ventanas de mi script. Con esto concluimos esta demostración.