Importar fichero ascii de Contaplus

192 views
Skip to first unread message

José Luis

unread,
Nov 23, 2022, 12:06:10 PM11/23/22
to Comunidad de Visual Foxpro en Español
Hola amigos,

Necesito convertir un fichero ascii de asientos y subcuentas de contaplus a un cursor para poder manipularlo.

El caso es que el fichero ascii que tengo no está delimitado, ni es de ancho fijo y no sé como tratarlo.

Intento importarlo con Excel con todas las opciones de delimitación pero no obtengo resultado.

¿Me pueden decir como tengo que tratarlo?
diario2.txt

Ignacio Debole

unread,
Nov 23, 2022, 12:17:29 PM11/23/22
to publice...@googlegroups.com
Vas a tener que cortarlo con un Excel para saber qué campos corresponden a cada columna. Tienen ancho fijo por lo que vi.
Después crear un dbf o cursor con esas mismas columnas y tipos de dato.
Lees cada línea y hacés la misma cantidad de SUBSTR que columnas del dbf o cursor, pasando cada corte a una variable.
Después volcás la variable a cada columna con Insert o Replace al dbf o cursor.
Saludos



--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/904df8e9-eecb-4564-a972-0148ea7042a2n%40googlegroups.com.

HernanCano

unread,
Nov 23, 2022, 12:49:00 PM11/23/22
to Comunidad de Visual Foxpro en Español
Jose:
Sí es de ancho fijo.
Y sí se puede tratar con Excel.

Desde Excel debes tratar como ancho fijo.
borrable1.png
borrable2.png
borrable3.png

José Luis

unread,
Nov 23, 2022, 1:24:33 PM11/23/22
to Comunidad de Visual Foxpro en Español
Vale, veo que moviendo las flechas lo puedo adaptar.
¿Pero lo puedo importar a un cursor sin tener que pasar por un excel?
La idea es convertir esta información a otro formato sin tener que pasar por el excel

Ignacio Debole

unread,
Nov 23, 2022, 2:34:53 PM11/23/22
to publice...@googlegroups.com
Como te respondí previamente, sí, pero no hay nada automático, hay que trabajarlo.
Debés trabajarlo sólo una vez con el Excel para saber cómo crear las columnas, los tipos de datos y cuántos caracteres tomar en cada columna, después creas el programa para automatizarlo y ya no debés usar el Excel, quizás no se entendió eso.
Saludos

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

HernanCano

unread,
Nov 23, 2022, 2:46:22 PM11/23/22
to Comunidad de Visual Foxpro en Español
Plenamente de acuerdo con tu comentario, Ignacio.

Gerardo Cagnola

unread,
Nov 23, 2022, 3:02:02 PM11/23/22
to Comunidad de Visual Foxpro en Español
lo primero es saber como es la estructura de los archivos de contaplus
primero lo primero 
sin ese dato no se puede arrancar...

José Antonio Peña Martínez

unread,
Nov 23, 2022, 8:49:03 PM11/23/22
to publice...@googlegroups.com
Jose luis el archivo ascii trae dos renglones. me podrias decir si ocupas los dos? Otra, podrias decir que columnas ocupas?

veo el archivo tiene campos de logitud  fija ... podrias intentar extraer los datos de ocupas.

Saludos!




--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--
Desarrollo de Sistemas TecnoPro
José Antonio Peña

Saludos!

Marco Plaza

unread,
Nov 23, 2022, 9:03:11 PM11/23/22
to Comunidad de Visual Foxpro en Español
Los archivos de ancho fijo se pueden importar directo a un dbf usando append from xx type sdf"
pero es complicado crear el cursor o mantenerlo si es muy largo como es tu caso.

esta rutina facilita  esa tarea:

```
 _sdf2cursor("diario2.txt","4,8,10,12,20,6,13,8")
browse normal
```

_sdf2cursor.prg:
```
*---------------------------------
* Marco Plaza, 2012
* crea una tabla util para importar archivos de ancho fijo
* indicando el ancho de cada columna separado por comas
* ej _sdf2cursor('miarchivo.sdf',"2,10,25,38")
* posdeCorte:
* suministrar una lista de posiciones de corte
* ej _sdf2cursor('miarchivo.sdf','2,12,37,75',.t.)
*---------------------------------
parameter txtFile,listacsv,posdeCorte

try

    local desde,lc,tt,coma,v1,l,oerror

    listacsv = m.listacsv+','

    desde = 1
    oerror = .f.

    lc = 'create cursor '+sys(2015)+' ( '
    tt = 1

    do while .t.

        coma = at(',',m.listacsv)

        if m.Coma = 0
            exit
        endif

        v1 = val(   left( m.listacsv , m.Coma-1 ) )

        listacsv = substr(m.listacsv,m.Coma+1,1000)

        if m.posDeCorte
            l = m.v1-m.desde
            desde = m.desde+m.l
        else
            l = m.v1
        endif

        lc =  m.lc+' C'+trans(m.tt)+' C('+trans(m.l)+') ,'

        tt = m.tt+1

    enddo

    lc = m.lc+')'
    lc = strtran(m.lc,',)',')')

    &lc
    append from (m.txtFile) sdf

catch to oerror
endtry

if vartype(m.oerror) = 'O'
    error oerror.message
else
    return alias()
endif

```

José Luis

unread,
Nov 24, 2022, 7:31:21 AM11/24/22
to Comunidad de Visual Foxpro en Español
Muchas gracias a todos por sus respuestas

Saludos

almonts ( www.ontariombd.es )

unread,
Nov 24, 2022, 1:08:28 PM11/24/22
to Comunidad de Visual Foxpro en Español
Buenas tardes.

Adjunto una rutina funcional que a mi me sirve para lo que mencionas. 
En este caso es para importar el fichero de asientos.
Espero que te sirva, saludos :)



     release MARCHIVO, CLINEA
     local   MARCHIVO as memo, CLINEA
     
     MARCHIVO=""
     CLINEA=""
     
    MARCHIVO=FILETOSTR("C:\Contaplus\XDiario.txt")   && VARIABLE MEMO DONDE SE CARGA TODO EL ARCHIVO
   
    SET MEMOWIDTH TO 1190   && ANCHO LINEA CONTAPLUS   ( POSIBLEMENTE HAYA QUE AJUSTARLO, DEPENDIENDO DE LA VERSION)
    IF MEMLINES(MARCHIVO)>00
        FOR TT=01 TO MEMLINES(MARCHIVO)  && FOR -  END FOR DE TODAS LAS LINEAS

            CLINEA=ALLTRIM(MLINE(MARCHIVO, TT))  && LINEA DEL APUNTE

            CVAR      =SUBSTR(CLINEA,05,08)
            DFECHA =CTOD(RIGHT(CVAR,02)+"/"+SUBSTR(CVAR,05,02)+"/"+LEFT(CVAR,04))   && FECHA
                   
            CASIENTO=PADL(ALLTRIM(SUBSTR(CLINEA,01,04)),08,'0')  && ASIENTO
            CTEXTO=UPPER(ALLTRIM(SUBSTR(CLINEA,53,30)))          && TEXTO - DESCRIPCION
           
            CDOCUMENTO=ALLTRIM(SUBSTR(CLINEA,94,10))             && DOCUMENTO

            CSUBCUENTA=ALLTRIM(SUBSTR(CLINEA,13,10))             && SUBCUENTA
           
            CCONTRAPARTIDA=ALLTRIM(SUBSTR(CLINEA,25,10))         && CONTRAPARTIDA
            IF LEN(CCONTRAPARTIDA)<08
                    CCONTRAPARTIDA=""
            ENDIF                
                       
            NDEBE=VAL(CHRTRAN(ALLTRIM(SUBSTR(CLINEA,238,15)),'.' , ','))   && DEBE
            NHABER=VAL(CHRTRAN(ALLTRIM(SUBSTR(CLINEA,254,15)),'.' , ','))  && HABER

        NEXT TT
   
    ENDIF
Reply all
Reply to author
Forward
0 new messages