martes, mayo 27, 2014

Gestión de Archivos de Texto con Genexus.

Event 'Archivo'
    &Fecha = &Today
    Do 'Formatear_Fecha'
    &ArchivoDeTexto = 'C:\Log_'+&ResultadoFecha.Trim()
    &ArchivoDeTexto = &ArchivoDeTexto.Trim()+'_'+&Time.Substring(1,2)+&Time.Substring(4,2)+&Time.Substring(7,2)
    &ArchivoDeTexto = &ArchivoDeTexto.Trim()+'.txt'

    //Cargo el SDT con los datos necesarios para poder generar el LogFile
    &ArchivoLog.NombreArchivo = &ArchivoDeTexto.Trim()
    For Each
        Defined By telefono
        &LineaLog.Telefono = telefono.Trim()
        &LineaLog.Gestion = gestion
        &LineaLog.PrimerNombre = primernombre
        &LineaLog.PrimerApellido = primerapellido
        &LineaLog.Monto = monto
        &LineaLog.FechaDeIngreso = fechadeingreso
        &ArchivoLog.Lineas.Add(&LineaLog)
        &LineaLog = New LogFile.Lineas()
    EndFor
    &Cant = &ArchivoLog.Lineas.Count

    If &Cant > 0
        Confirm('¿Desea exportar resultados a un Archivo de Texto?')
        If Confirmed()
            &i = dfwopen( &ArchivoDeTexto, ",", '"')
            For &LineaLog In &ArchivoLog.Lineas
                &i = dfwptxt( &LineaLog.Telefono.Trim() )
                &i = dfwpnum( &LineaLog.Gestion, 0 )
                &i = dfwptxt( &LineaLog.PrimerNombre )
                &i = dfwptxt( &LineaLog.PrimerApellido )
                &i = dfwpnum( &LineaLog.Monto, 0 )
                &i = dfwptxt( &LineaLog.FechaDeIngreso.ToString())
                &i = dfwpdate( &LineaLog.FechaDeIngreso, "dmy", "-" )
                &I = dfwnext()
            EndFor
            &i = dfwclose( )
            If &i = 0
                Msg('Archivo de texto generado correctamente!')
            Else
                Msg('Han ocurrido errores al generar el Archivo de texto!')
            EndIf
        Else
            Msg('Paso a XML')
            &xml = &ArchivoLog.ToXml()
            //Grabar en archivo XML
            &filexml.open('C:\CLIENTES.xml')
            &filexml.WriteStartDocument()
            &filexml.WriteStartElement('CLIENTES')
            For Each
                &filexml.WriteStartElement('CLIENTE')
                    &filexml.WriteElement('NOMBRE', primernombre.Trim()  )
                    &filexml.WriteElement('APELLIDO', primerapellido.Trim()  )
                    &filexml.WriteElement('INGRESO', dtoc(fechadeingreso)  )
                &filexml.WriteEndElement()  
            EndFor
            &filexml.WriteEndElement()  
            &filexml.Close()
        EndIf
    EndIF
EndEvent  // 'Archivo'

Sub 'Formatear_Fecha'
    &ResultadoFecha = Trim(Str(&Fecha.Year()))+'-'
    If &Fecha.Month() > 9
        &ResultadoFecha = &ResultadoFecha.Trim()+Trim(Str(&Fecha.Month()))+'-'
    Else
        &ResultadoFecha = &ResultadoFecha.Trim()+'0'+Trim(Str(&Fecha.Month()))+'-'
    EndIf
    If &Fecha.Day() > 9
        &ResultadoFecha = &ResultadoFecha.Trim()+Trim(Str(&Fecha.Day()))
    Else
        &ResultadoFecha = &ResultadoFecha.Trim()+'0'+Trim(Str(&Fecha.Day()))
    EndIf
EndSub

//Consideraciones sobre los archivos ASCII delimitados
//
//Sólo puede estar abierto un archivo ASCII delimitado en un momento específico. La función dfropen retornará un error si se la llama más de una vez sin haber llamado previamente a dfrclose.
//Es posible ignorar los campos del final de un registro al llamar a dfrnext cuando queden campos por leer. No es posible ‘saltearse’ campos. Si se quiere leer el campo número 5 es necesario leer los 4 anteriores.
//Es posible leer registros con diferentes formatos como en el siguiente ejemplo:
//
//&i = dfropen( "invoices.txt", 80, “,”)
//do while dfrnext( ) = 0
//    &i = dfrgtxt( &RecType)
//    if &RecType = “H”
//       &i = dfrgnum( &InvNum )
//       &i = dfrgdate( &InvDat, “ymd”, “/“)
//    else
//       &i = dfrgnum( &PrdNum )
//       &i = dfrgnum( &InvQty)
//    endif
//enddo
//&i = dfrclose( )

Event 'UnDato'
    &Fecha = &Today
    Do 'Formatear_Fecha'
    &i = dfwopen( "C:\Empleados.txt", ",", '"')
    &i = dfwptxt( 'Empleado' )
    &i = dfwpnum( 1, 0 )
    &i = dfwptxt( 'Luis' )
    &i = dfwptxt( 'Rosas' )
    &i = dfwpnum( 1200, 0 )
    &i = dfwptxt( &ResultadoFecha )
    &i = dfwpdate( &Today, "dmy", "-" )
    &i = dfwptxt( &Time )
    &I = dfwnext()
    &i = dfwclose( )
    If &i = 0
        Msg('Archivo de texto generado correctamente!')
    Else
        Msg('Han ocurrido errores al generar el Archivo de texto!')
    EndIf
EndEvent  // 'UnDato'

Gracias a  rosastoriani@gmail.com

No hay comentarios: