miércoles, 27 de mayo de 2020

Combinación de colores, Moda y programación

Share this Post Share to Facebook Share to Twitter Email This Pin This
Hola bienvenidos a otro post de este blog, estuve pensando en que otra área podíamos utilizar programación así que leyendo las noticias e Instagram, el 4 de mayo debió llevarse acabo La MET Gala , que es un evento que promueve (Museo Metropolitado de New York) donde artistas, famosos y celebridades acuden al evento y siguen una temática en su vestimenta, este año es Tiempo: moda y su permanencia como no se llevo acabo muchos artistas decidieron recordar en Instagram con fotos de galas anteriores y Vogue hizo un vídeo con los momentos más representativos.

Como resultado de esto Pensé en la Moda para generar un programa y este post, no me considero una persona con el criterio para dar consejos de moda, pero si una persona que pueda desarrollar una Página que de manera aleatoria nos sugiera 4 colores a combinar en nuestra ropa .



Les platico un poco más acerca de la moda, hay 2 temporadas para la semana de la moda una para la colección primavera-verano y otra otoño-invierno las semanas de la moda terminaron el 28 de Febrero de 2020 en Milán pero en Septiembre 11 comienzan de Nuevo en New York, les comparto las fechas y las ciudades



  • Del 6 al 14 de Febrero y del 11 al 16 de Septiembre, fue la semana da la moda en New York
  • Del 14 al 18 de Febrero y del 18 al 22 de Septiembre, fue la semana de la moda en Londres
  • Del 18 al 24 de Febrero y del 22 al 28 de Septiembre, semana de la moda en Milan
  • Del 24 de Febrero al 4 de marzo y del 28 de Septiembre al 6 de Octubre, la semana de la moda en París
  • Otros eventos que son importantes para la moda son los premios como los Golden Globe, los Oscares, Emys, Gramys, MET Gala 

    Si quieren ver las fechas e incluso las agendas pueden verlo en las siguientes ligas:

    Cada año existen los colores de temporada y diferente temporadas en la moda de acuerdo a las temporadas, primavera,verano,otoño invierno 


    • Naranja
    • Saffron
    • Aguamarina
    • Verde Hierba fresca
    • Rosado Coral
    • Morado
    • Classic Blue o lei  Heridate BLue





    Bueno buscando todo esto pensé en como hacer una Pagina WEB , que te ayude a poder armar tus combinaciones en tu look y que estés a la moda. 

    Primer paso arme mi colección de moda con 6 diseños:



    Esta moda esta inspirada en una muñeca recortarle que vendían y que podías vestir, quizá viendo una imagen algunos la recuerden



    Mis diseños no tiene color, porque el color los vamos a mostrar  en la página en base a los colores de moda de esta temporada Primavera-Verano 2020, la página nos va a calcular la combinación y el atuendo de manera aleatoria 


    La página es  

    https://ejemploprogramacionparatodos.000webhostapp.com/Pagina_moda.html

    La pantalla de inicio tiene los 6 diseños y 2 botones: Diseño a vestir y Colores a combinar

    https://ejemploprogramacionparatodos.000webhostapp.com/Pagina_moda.html




    Con el botón diseño a vestir abre una pantalla con la sugerencia del diseño a vestir

    Con el botón colores a combinar , te abre otra pantalla con la sugerencia de 4 colores a combinar 


    La página HTML


    <html>
    <head>
    <title>Combinaciones de Ropa</title>
    </head>
    <body>
    <p> Esta página es un ejemplo de como mostrar combinación de colores </p>
    <p> Primero mi coleccion de moda ProgramacionParaTodos 2020 </p>
    <img src="esquema.png" alt="Smiley face" height="300" width="800">
    <p>Ahora vamos a presionar el botón de Diseño a Vestir para
    elegir un modelo y despúes el botón Colores a Combinar para saber cuales utilizar
    y ¡¡¡vestir así el día de hoy!!!
    <form action="pagina_moda2.php" method="GET">
     <div align="center">
       <input type="submit" value="Diseño a Vestir"/>
     </div>  
    </form>
    <form action="pagina_moda3.php" method="GET">
     <div align="center">
       <input type="submit" value="Colores a Combinar"/>
     </div>  
    </form>

    </body>

    </html>

    El programa en PHP para seleccionar modelo

    <?php
    $num_atuendo = rand(1, 6);
    $esquema = "esquema" . strval($num_atuendo) . ".png";
    header("Content-type: image/png");
    $im = imagecreatefrompng($esquema);
    imagepng($im);
    imagedestroy($im);
     
    ?>

    Para el programa cada imagen es un archivo con nombre esquema1.png.... hasta el esquema6.png, lo que hacemos generar un numero aleatorio para que nos muestre el esquema correspondiente a ese número aleatorio.

    El programa en PHP para seleccionar colores
    <?php
    // Crear una imagen de 200 x 200
    $lienzo = imagecreatetruecolor(500, 100);

    // Asignar colores
    $azul = imagecolorallocate($lienzo, 51, 85, 139);
    $amarillo =  imagecolorallocate($lienzo, 254, 175, 18);
    $verde = imagecolorallocate($lienzo, 78, 196, 164);
    $chiva  = imagecolorallocate($lienzo,86, 92, 70);
    $rosa = imagecolorallocate($lienzo, 233, 172, 157);
    $canela = imagecolorallocate($lienzo, 162, 85, 58);
    $uva = imagecolorallocate($lienzo,114, 97, 124);
    $sol =  imagecolorallocate($lienzo,239, 218, 164);

    // Dibujar 4 cuadrados, cada uno con su color
    $col1 = rand(1,8);
    switch ($col1) {
        case 1:
            imagefilledrectangle($lienzo, 4, 4, 100, 100, $azul);
            break;
        case 2:
            imagefilledrectangle($lienzo, 4, 4, 100, 100, $amarillo);
            break;
        case 3:
            imagefilledrectangle($lienzo, 4, 4, 100, 100, $verde);
            break;
        case 4:
            imagefilledrectangle($lienzo, 4, 4, 100, 100, $chiva);
            break;        
        case 5:
            imagefilledrectangle($lienzo, 4, 4, 100, 100, $rosa);
            break;     
        case 6:
            imagefilledrectangle($lienzo, 4, 4, 100, 100, $canela);
            break;       
        case 7:
            imagefilledrectangle($lienzo, 4, 4, 100, 100, $uva);
            break;  
        case 8:
            imagefilledrectangle($lienzo, 4, 4, 100, 100, $sol);
            break;  
    }
    ........

    $col4 = rand(1,8);
    switch ($col4) {
        case 1:
            imagefilledrectangle($lienzo, 360, 4, 460 , 100, $azul);
            break;
        case 2:
            imagefilledrectangle($lienzo, 360, 4, 460 , 100, $amarillo);
            break;
        case 3:
            imagefilledrectangle($lienzo, 360, 4, 460 , 100, $verde);
            break;
        case 4:
            imagefilledrectangle($lienzo, 360, 4, 460 , 100, $chiva);
            break;        
        case 5:
            imagefilledrectangle($lienzo, 360, 4, 460 , 100, $rosa);
            break;     
        case 6:
            imagefilledrectangle($lienzo, 360, 4, 460 , 100, $canela);
            break;       
        case 7:
            imagefilledrectangle($lienzo, 360, 4, 460 , 100, $uva);
            break;  
        case 8:
            imagefilledrectangle($lienzo, 360, 4, 460 , 100, $sol);
            break;  
    }

    // Imprimir y liberar memoria
    header('Content-Type: image/jpeg');
    imagejpeg($lienzo);
    imagedestroy($lienzo);
    ?>



    Luego para saber de que color vestirse tome los códigos de colores RGB de la página https://simpledits.com/color-palette-guide-with-pantone-colors-for-spring-summer-2020-nyfw-with-hex-cmyk-and-rgb-values/  y puse igual 4 funciones rand para saber que colores pintar


    Para más información de la función rand de PHP vean la liga
    Para más información de la función imagepng de PHP vean la liga
    Para más información de la función  imagefilledrectangle de PHP vean la liga

    Recuerden probar la página 

    https://ejemploprogramacionparatodos.000webhostapp.com/Pagina_moda.html


    La verdad es una página muy sencilla y pueden hacer o existen otras aplicaciones más complejas que te permiten crear un closet virtual y armar combinaciones, o buscar tendencias de moda por ejemplo, buscar un atuendo por fotografía les comparto algunas opciones que encontré:


    No olvide compartirnos y seguirnos en este blog o en Facebook.

    jueves, 21 de mayo de 2020

    Arduino y teclado

    Share this Post Share to Facebook Share to Twitter Email This Pin This
    Hola bienvenidos a un nuevo post, estuve pensando de que escribir esta semana y vi mi KIT de Sensores de Arduino y vi el Teclado como el de la imagen



    kit Elegoo para Arduino

    Recordé cuando estudiaba electrónica y que para hacer ese teclado se hacía de 2 formas una era, con Puch Botón NA (normalmente abiertos) que son como los de la imagen

    Push Boton
    Armar un teclado de 9 números era conectarlo como el diagrama siguiente

    Después de recordar esto pensé en probar el teclado con mi Arduino para hacer la validación de una clave como si fuera abrir una puerta por ejemplo.

    Como les comentaba en post anteriores mi kit lo compre en Amazon y son de la marca Elegoo y tiene un CD con el código para hacer pruebas.

    Les comparto el vídeo de como funciona el teclado con Arduino Uno, mi programa si se digita el numero 8, prende un LED y si presionan la tecla A se apaga, para conectar el teclado en la membrana de conexión esta marcado el numero 1 y 8, El pin 1 va conectado a pin D2 de nuestra placa de Arduino y el PIN 8 del teclado al Pin D9, yo utilice el 10 para conectar el LED.

    La parte del programa que yo actualice 



    void setup(){
      Serial.begin(9600);
      pinMode(ledPIN , OUTPUT);
    }
      
    void loop(){
      char customKey = customKeypad.getKey();
      if (customKey)
      {
        Serial.println(customKey);
      }
      switch (customKey)
          {
             case '8':
             Serial.println("Hola 8");
             digitalWrite(ledPIN , HIGH);   
             delay(1000); 
             break;
             case 'A':
             Serial.println("Hola A");
             digitalWrite(ledPIN , LOW);   
             delay(1000); 
             break;
          }  
      
    }

    Y les comparto el vídeo de ejecución del programa



    Foto de como se ve la ejecución en pantalla, cada vez que se digita el teclado. NOTA: si ven el monitor datos diferentes a los tecleados, puede ser que su teclado este conectado inversamente, a mi me paso, solo inicie con el pin inverso del teclado a mi placa de Arduino Uno.


    Si quieres ver algunos otros post de este blog acerca de Arduino visita las siguientes ligas

    No olvide compartirnos y seguirnos en este blog o en Facebook.

    jueves, 14 de mayo de 2020

    Inteligencia Artificial

    Share this Post Share to Facebook Share to Twitter Email This Pin This
    Hola amigos bienvenidos a un nuevo Post, hace un mes ¡¡cumplimos un año de este blog!! y bueno no sabía de que escribir y me tome un tiempo para definir el tema de hoy que es Inteligencia Artificial, es un tema del que estoy comenzando aprender y que no quería hablar sin antes entender un poco más.


    Primero a principios de año visite con un grupo de amigas la primer Universidad solo enfocada a Inteligencia Artificial, esta escuela esta en los Emiratos Árabes Unidos en Abu Dabi la escuela se llama :



    Pagina de la Universidad de Inteligencia Artificial MBZUAI




    Llegamos primero con ayuda de Google maps a la ciudad inteligente de Masdar


    La Universidad esta dentro de la ciudad y llegamos y ahí hay algunos edificios, pero todavía sigue en construcción, estando ahí me sentí como en un capitulo de los Expedientes Secretos X (The x-Files), porque había vehículos estacionados, no vimos a nadie cuando nos estacionamos, se sentía como que había más personas pero no las veíamos, caminamos por donde creíamos se veía una puerta, pasamos por ahí y llegamos como a un patio central donde vimos varios edificios con departamentos suponemos de las personas que viven ahí. Después bajamos por unas escaleras y no llegamos a ningún lugar, luego vimos un letrero y pensamos que por ahí podíamos llegar nos metimos y encontramos baños y un cartel para poder solicitar transporte preguntamos y nos dijeron que SI, solo nos preguntaron cuantas personas eramos y nos enviaron una Van, los autos de la ciudad son o eléctricos o con gas.
    Llegando la Van nos llevaron a la Universidad ahí llegamos y todo se veía cerrado, pudimos entrar a la biblioteca y solo había 2 personas, vimos el edificio central pero nos indicaron que solo podían ingresar los maestros o los alumnos. 
    No encontramos con quien platicar acerca de la Universidad pero en la página de ellos mencionan que tienen 4 programas, 2 maestrías y 2 doctorados  en Aprendizaje Automático o Machine Larning,Vision por Computadora o Computer Vision.

    Les comparto algunas fotos de las instalaciones

    MASDAR
    El estacionamiento de Masdar 

    Llegando a la Universidad

    La recepción de la Universidad, pero cuando fuimos estaba vacía y nos dijeron que no podíamos ingresar al edificio principal.

    Biblioteca

    Primer Universidad de Inteligencia Artificial
    Caminando por los otros edificios vecinos


    La idea de aprender acerca de nuevas tecnologías siempre se me hace emocionante y estar en un lugar así me hizo darme cuenta que el mundo sigue avanzando que lo que aprendí en la Universidad, o en la Maestría, o diplomados o en curso, aún no es suficiente que siempre hay mucho más por aprender, siempre hay algo nuevo que estudiar que descubrir y que vivir.

    La Inteligencia Artificial es una área de la computación que se encarga de entender como poder simular por medio de computadoras los procesos de aprendizaje que tenemos los humanos o el comportamiento y reacción que tenemos a nuestro entorno, para lograr que máquinas, robots, software puedan realizar tareas como si las hiciera una persona pero de manera más precisa y más rápida un ejemplo de esto es: la identificación de rostros en Facebook, la separación de nuestros correos de spam, o incluso cuando redactamos un correo por ejemplo en Gmail nos trata de predecir que queremos escribir, robots que pueden seguir una ruta de manera autónoma, robots de WhatsApp y Facebook Messenger, un dron pueda realizar una entrega de pedido solo

    Helicóptero manejado autonomamente por la Universidad de Stanford

    Durante mi vida académica solo he tenido 2 momentos de estudio directo para Inteligencia Artificial uno durante mis años en la Universidad en la BUAP donde tome la materia, donde recuerdo haber visto teoría de grafos, árboles de decisión, autómatas. Y en este momento estoy tomando un curso en linea Machine Learning de la Universidad de Stanford  donde la verdad he aprendido varios conceptos como que hay Algoritmos de aprendizaje controlados y NO controlados, los controlados son los que los resultados a llegar ya son conocidos. Para los NO controlados son resultados pero organiza los datos y en base a la preparación de los datos llega a una respuesta. en el curso he visto proceso de regresión lineal, funciones de costo, como aplicar álgebra por medio de matrices y vectores como poder resolver problemas .

    Curso de Learning Machine Coursera

    Utilizar Probabilidad, regresiones lineales y otras técnicas de matemáticas para poder encontrar predicciones de datos, como mediante las gráficas entender que significa los valores, encontrar el segmento de borde entre una clasificación y otra.

    Encontré un diagrama de Machine Learning que explica sus ramificaciones y sus usos

    Tomado de OTECH

    Hay dos herramientas de software en el curso que son Matlab y Octave que son utilizados para realizar cálculos, para mostrar datos, son utilizados para biología, robots, procesamiento de imágenes es usado por ingenieros, doctores, científicos...
    Otros lenguajes de programación para poder realizar estudios o análisis de inteligencia artificial son R, Python 


    MATLAB


    Octave es la "versión gratuita" similar a MATLAB



    Si quieren imaginar que se puede hacer estudiando inteligencia artificial o alguna de sus ramas les recomiendo ver  las siguiente lista de películas:

    Eagle Eye o la Conspiración del pánico
    El Hombre bicentenario

    Al terminar mi curso les escribiré más acerca de este tema tan interesante y complejo.
    No olvide compartirnos y seguirnos en este blog, en Facebook.

    jueves, 30 de abril de 2020

    Códigos de barras

    Share this Post Share to Facebook Share to Twitter Email This Pin This
    Los códigos de barras son utilizados hoy en día en todos los productos que compramos, en el post de hoy les quiero compartir mas acerca del mundo del códigos de barras.

    Existen diferentes tipos y estandartes de códigos de barras en lo profesional conozco:

    Code39

    Es un código que permite utilizar letras y números, se requiere mucho espacio para este código.  
    Code39 es un código de barras sencillo que permite generar códigos de manera fácil, si por ejemplo tienen un Pyme pueden manejar este tipo de códigos en sus productos y pueden generar sus etiquetas en Excel o Word utilizando la fuente de letra 


    Para descargar las fuentes hay siguientes ligas



    Descargando la fuente solo deben copiar el archivo en el panel de control de fuentes





    Solo muevan los archivos en las fuentes y comenzara a instalar
    Para poder instalar pueden seguir este manual que encontré



    Y luego solo en Word y Excel selecciona la fuente y el texto se vera como un Barcode9.




    Solo deben imprimirlo y se puede escanear con alguna aplicación de APP o con un scanner bidireccional.




    La desventaja de este código de barras es que al ocupar mucho espacio si los productos son muy pequeños no se pueden etiquetar. 


    Code128



    Este código es parecido al Code39, sirve para letras, números, algunos caracteres especiales incluidos en el código ASCII pero Code128 es más angosto en su codificación. 


    GS1-128

    Este estándar es más complejo que permite manejar diferentes segmentos en un mismo código por ejemplo él código del item, fecha de caducidad, lote, serie, por mencionar algo.

    GS1-128 es un estándar de la empresa GS1 y es más utilizado por la industria, por ejemplo en los artículos que compramos en el supermercado tiene códigos de barras que empiezan en México por ejemplo con 750 (que es el código del país que lo produjo).


    Para cada segmento coloca un indicador del segmento:


    Después de explicarles acerca de diferentes tipos de códigos de barras, la pregunta es ¿Que tiene que ver con nuestro blog de programación? .... La respuesta es que para poder crear y leer los códigos de barras utilizamos software y Hardware. El caso de Hardware les puedo comentar acerca de los escanners bidimensionales que mencionamos en el Code39, hay escanner multidimensionales como los que utilizan (en las cajas de cobro) los autoservicios, existen Handheld de marcas como Zebra, Honeywell, Motorola, Android  .
    Para el Software que es lo que quiero mostrarles es cómo pueden desarrollar sus códigos de barras en diferentes lenguajes de programación:

    Progress4gl


    Para ingresar en Progress 4gl un código de barras es necesario ingresar en nuestro programa el código del lenguaje de la impresora que vamos a utilizar por ejemplo de la impresora Zebra  que es ZPL 


    En su pagina colocan algunos ejemplos de como utilizar el código

    En el programa de Progress debemos insertar en un archivo de salida el texto que queremos colocar en nuestra etiqueta. Por ejemplo

    OUTPUT TO "labeltest".
    PUT 
    "^XA" SKIP
    "^FO50,50^BY3^BCN,100,Y,N,N^FD>;382436>6CODE128>752375152^FS" SKIP
    "^XZ" SKIP .

    OUPUT CLOSE.

    La salida debe ser una etiqueta con este texto




    Crystal Reports de Microsoft



    Es necesario ingresar el Control  de Código de Barras hay 3 opciones: Linear, 2D y código de barras simple
    El dato en el código de barras puede ser un texto fijo o puede ser un data en un dataset que contiene un valor de alguna consulta a una base de datos

    PHP

    Para PHP podemos leer los datos desde nuestra base en Mysql, utilizando la librería https://github.com/davidscotttufts/php-barcode, encontré un post de Denisse Estrada donde explica como ejecutarlo la liga es https://denisseestrada.com/como-generar-un-codigo-de-barras-con-php/


    Yo hice un ejemplo sencillo  en mi página de ejemplos

    <html>
    <p>Prueba de código de barras</p>
    <img alt="testing" src="barcode.php?text=ProgramacionParaTodos" />
    <p>ProgramacionParaTodos</p>
    </html>




    Otro ejemplo colocando un campo con input

    <html>
    <p>Prueba de código de barras</p>
    <img alt="testing" src="barcode.php?text=ProgramacionParaTodos" />
    <p>ProgramacionParaTodos</p>
    <form action="barcode.php" method="GET">
     <input type="text" id="text"   name="campo1" placeholders="Ingresa el texto que quieres probar"/>
     <input type="submit" value="Enviar"/>
    </form>
    </html>



    Pueden probar el programa en https://ejemploprogramacionparatodos.000webhostapp.com/EjemplocodigoBarras.php

    Ustedes pueden  leer un base de datos y presentar la información en códigos de barras.


    Si tienen más ejemplos de como han utilizado ustedes los códigos de barras en otros lenguajes por favor cuéntanos para seguir aprendiendo.


    Espero les haya gustado este post ,nos compartan, no olviden buscar más temas en nuestro blog en nuestro Home y seguirnos en nuestra Página de Facebook ProgramacionParatodos.com



    jueves, 23 de abril de 2020

    Progress 4gl arreglos dinamicos

    Share this Post Share to Facebook Share to Twitter Email This Pin This
    En el post de esta semana vamos a platicar de un ejemplo en Progress 4gl para hacer arreglos ( en mi caso solo vector que es un arreglo de solo una dimensión) dinámicas, cuando decimos que es dinámico es decir podemos definir de tamaño variable una matriz (Algebra líneal), quizá con una imagen sea más fácil de entenderlo

    Una Matriz
    Algebra Lineal y Programación

    Un Vector





    La ventaja de un arreglo dinámico es que si no sabes cual es el tamaño exacto de un vector para poder realizar un programa o una operación, lo mejor es para no utilizar memoria demás es definir un arreglo dinámico, en Java  por ejemplo son arreglos que van cambiando de tamaño con forme  se agregan elementos , la instrucción es dynamic array. En Python  por ejemplo no definimos el tamaño de los vectores y matrices, este se va modificando, conforme nosotros modifiquemos los datos. Progress tiene algo que realiza esta función que es utilizando la palabra Extent, esta instrucción nos permite definir un vector sin tamaño al inicio de un programa por ejemplo

    DEF VAR arr_col         AS CHARACTER NO-UNDO EXTENT .

    Más adelante en el programa cuando ya sabemos el tamaño, actualizamos el dato asi:

    EXTENT(arr_col) = vc-totcol.


    Por ejemplo yo lo utilice para un reporte que dependiendo de las marcas que encontrara en una tabla fueran las columnas del reporte y las filas serías los códigos de artículos, todo esto lo envié a una tabla temporal y después mostré los datos y como esto no era estático, cree el reporte de manera dinámica y utilice 2 vectores uno para las marcas y otro para los números de parte y para mostrar el resultado busco en la tabla temporal con dos bucles o ciclos uno que va leyendo las filas y otro que va leyendo las columnas y hace un for each con los datos que cumplen las 2 condiciones. 

    vc-totrow = 0.
    vc-totcol = 0.

    FOR EACH ttresult NO-LOCK BREAK BY marca :
        
      IF LAST-OF(marca) THEN DO:
         vc-totrow =  vc-totrow + 1.
      END.  
    END.

    FOR EACH ttresult NO-LOCK BREAK BY part:
       IF LAST-OF(part) THEN DO:
        vc-totcol =  vc-totcol + 1.
       END.
    END.

    vc-indc = 1.
    vc-indr = 1.

    EXTENT(arr_col) = vc-totcol.

    EXTENT(arr_row) = vc-totrow.


    FOR EACH ttresult NO-LOCK BREAK BY marca:
        
      IF LAST-OF(marca) THEN DO:
         arr_row[vc-indr] = marca.
    vc-indr = vc-indr + 1.
      END.  
    END.

    FOR EACH ttresult BREAK BY parte:
       IF LAST-OF(parte) THEN DO:
        arr_col[vc-indc] = parte .
    vc-indc= vc-indc + 1.
       END.

    END.


    OUTPUT STREAM s-excel TO VALUE(vc-exc-file) PAGE-SIZE 0.

    /* Headers */
    PUT STREAM s-excel UNFORMATTED 
        "Marca"   "~011".

    DO iy = 1 TO EXTENT(arr_col):
       IF arr_col[iy] <> "" THEN 
      PUT STREAM s-excel UNFORMATTED arr_col[iy] "~011" .
    END.
      
      PUT STREAM s-excel UNFORMATTED SKIP.

    /*Detail*/  
      
    DO ix = 1 TO EXTENT(arr_row):
          IF SUBSTRING(arr_row[ix],1,8) <> "" THEN DO:   
         PUT STREAM s-excel UNFORMATTED 
             SUBSTRING(arr_row[ix],1,8)   "~011"
             TRIM(SUBSTRING(arr_row[ix],10,8)) "~011".
    END.  
      DO iy = 1 TO EXTENT(arr_col):
      
     
      FIND FIRST ttresult WHERE marca = SUBSTRING(arr_row[ix],1,8) 
              AND parte       = arr_col[iy] NO-LOCK NO-ERROR.
       
      IF AVAIL ttresult AND arr_col[iy] <> ""   THEN DO:
       
         PUT STREAM s-excel UNFORMATTED 
         cantidad "~011".
    END.
     
    IF NOT AVAIL ttresult AND arr_col[iy] <> "" THEN DO:
         PUT STREAM s-excel UNFORMATTED 
         "0.00" "~011".
    END.
     
      END. /* DO iy = 1 TO EXTENT(arr_col): */
       PUT STREAM s-excel UNFORMATTED SKIP.
    END.  /* DO ix = 1 TO EXTENT(arr_row): */


    OUTPUT STREAM s-excel CLOSE.

    El resultado de ejecutar este programa es como la siguiente imagen



    El tiempo de ejecución no es demorado y muestra la información de manera fácil para los usuarios

    Espero este programa les sea de utilidad, compartan el post y nos sigan en el #programacionparatodos  y en nuestra página de Facebook