Sismos en México: análisis de 363,329 eventos con Python

Imagen
¿Dónde se registran más sismos en México? ¿Las entidades con más eventos también concentran los sismos de mayor magnitud? ¿Qué años destacan? En este proyecto exploramos estas preguntas utilizando datos del Servicio Sismológico Nacional (SSN) y herramientas de Data Science. URL :http://www2.ssn.unam.mx:8080/catalogo/  Los datos: más de 363 mil registros sísmicos Para este análisis utilizamos el catálogo de sismos publicado por el Servicio Sismológico Nacional de la UNAM . El conjunto de datos contiene información sobre eventos sísmicos registrados en México, incluyendo fecha, hora, magnitud, coordenadas geográficas, profundidad y referencia de localización. El catálogo utilizado contiene registros desde agosto de 2000 hasta agosto de 2026 . Después de revisar y preparar la información contamos con: 363,329 eventos sísmicos ...

Crear Archivo XML desde Progress 4gl

Bienvenidos a otra semana en nuestro blog de programación, les quiero compartir un ejemplo de como crear un archivo XML desde Progress 4gl, esto es necesario en casos de comunicación con otros sistemas.


Primero que es un archivo XML son siglas de Extensible Markup Language , es un lenguaje que maneja etiquetas para definir la estructura de un layout para comunicar información, almacenar información y que se definan las reglas o características de la información para siempre hablar en los mismos término.

Para poder leer un XML siempre tendremos su contrapartida que es un XSD que nos sirve para definir la longitud de los campos, el tipo de campo si es carácter, entero o decimal.

Por ejemplo en México que tenemos el tema de facturación/complementos de facturación y contabilidad electrónicos para integrar la información al SAT esta institución entrega la definición del XML, por ejemplo el documento se ve así como las siguientes imágenes



La explicación en diagrama



Ejemplo


El objetivo del XML es que sea fácil de leer y de programar, veamos un ejemplo de como generar un archivo XML desde Progress 4gl

Primero un XML es un archivo con texto así que en Progress como generar un CSV es decir se trata igual como un archivo plano, la diferencia es como ir tratando las etiquetas, les voy a enseñar parte de un programa para generar el XML de Cuentas para contabilidad Electrónica



     OUTPUT STREAM sat-cat TO VALUE(vc-file) PAGE-SIZE 0
       CONVERT SOURCE "ISO8859-1" TARGET "UTF-8".
       
       /* Headers */
       FOR FIRST tablesat_mstr WHERE tablesat_code = "001"  NO-LOCK:
             
           PUT STREAM sat-cat UNFORMATTED     
               "<?xml version=" + QUOTER("1.0") + " encoding=" + 
               QUOTER("UTF-8") + "?> "    
               SKIP.
           PUT STREAM sat-cat UNFORMATTED                
                "<catalogocuentas:Catalogo xsi:schemaLocation=" + 
                QUOTER(tablesat_loc) +
                " xmlns:xsi=" + QUOTER(sat_xsi)  +
                " Version=" + QUOTER(sat__qad1)  + 
                " RFC=" + QUOTER(vc-rfc)  + 
                " Mes=" + 
                QUOTER(FILL("0", 2 - LENGTH(STRING(periodo))) + 
                STRING(periodo)) + 
                " Anio= " + QUOTER(STRING(Anio)) + 
                " xmlns:catalogocuentas=" + QUOTER(sat_doc) + ">"    
                SKIP.
       END. /* FOR FIRST tablesat_mstr WHERE tablesat_code = "001"NO-LOCK: */

   
       /* Details XML  */
       FOR EACH  tablesat2_mstr WHERE tablesat2_rfc = vc-rfc:SCREEN-VALUE AND 
                                      tablesat2_active = true      NO-LOCK:
        
           vc_account = "".
           vc_account = REPLACE(tablesat2_desc, "&", "") .
           vc_account = REPLACE(vc_account, "%", "") .
              
           PUT STREAM sat-cat UNFORMATTED       
               "<catalogocuentas:Ctas CodAgrup="            + 
               QUOTER(sat2_cod_agrup)                + 
               " NumCta=" + QUOTER(CAPS(sat2_acct))    +
               " Desc="   + QUOTER(vc_account)              + 
               " Nivel="  + QUOTER(STRING(sat2_level)) + 
               " Natur="  + QUOTER(CAPS(sat2_origin))  + "/>"         
               SKIP.
                      
       END.  /* FOR EACH  sat2_mstr  NO-LOCK:  */
       
       PUT STREAM sat-cat UNFORMATTED        
            "</catalogocuentas:Catalogo>"
            SKIP.

      OUTPUT STREAM sat-cat CLOSE.


Ejecución del programa nos crea el siguiente archivo


Este es solo un ejemplo, pero puede funcionar para comunicar 2 sistemas diferentes, enviar información entre usuarios y un tip para leer el XML en modo tabla , pueden abrirlo en Excel, lo que hago es arrastrar el archivo XML a una ventana de Excel y me pregunta como quiero abrir el archivo, selecciono XML como tabla 


Espero les sea de utilidad y les recomiendo leer también el POST dentro de este mismo blog acerca de como leer XML con Python
https://www.programacionparatodos.com/2019/05/programapython.html

También si quieren ver más programas en Progress 4gl les comparto las ligas

Como utilizar ACCUM en Progress como SUM de SQL 

Como Hacer vectores dinámicos en Progress


Como Hacer funciones en Progress

https://www.programacionparatodos.com/2020/06/FuncionesenProgress4gl.html

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

Comentarios

  1. Como importar un archivo XML en progress 4gl para leer su información???

    ResponderBorrar
  2. Hola para leerlo es un input file y lRetOK = hDSet:READ-XML(cSourceType, cFile, cReadMode, cSchemaLocation,
    lOverrideDefaultMapping, cFieldTypeMapping, cVerifySchemaMode).
    Mira la ayuda de Progress
    https://docs.progress.com/bundle/openedge-abl-reference-117/page/READ-XML-method.html

    ResponderBorrar

Publicar un comentario

Dejanos tus dudas y comentarios

🚀 Mantener este blog funcionando requiere tiempo y café. ¡Puedes contribuir con uno aquí!

Entradas más populares de este blog

Guía Práctica: Ejemplo Completo de ASPX para Desarrolladores Web

👉 Cómo obtener el tipo de cambio en Excel con API de Banxico (paso a paso)

Macro en Word para automatizar documentos: genera diplomas en segundos (con código VBA)