Page 1 of 1

append from

Posted: Mon Jun 23, 2014 1:47 pm
by surGom
Hola mi consulta es la siguiente, tengo unos archivos (de rentas pcia y capital) en txt y necesito pasarlos a dbf. Lo tengo solucionado gracias a un integrante de la lista de fivewin Carlos Vargas desde hace años, resuelto en visual fox pro. Que básicamente utiliza append from y en máximo 10 segundos los pasa a dbf. En su momento quise hacerlo y no pude, las soluciones que busqué fueron lentísimas. Estamos hablando de txt de entre 70 mega a 120 megas.

Les muestro los primeros renglones de un de ellos

24122010;01012011;31032011;20002729874;D;S;N;3,00;3,00;00;00;MOURI¦O GUILLERMO ANTONIO
24122010;01012011;31032011;20002733227;D;S;N;3,00;3,00;00;00;CASTRO EUGENIO LEONARDO
24122010;01012011;31032011;20002734118;D;S;N;3,00;3,00;00;00;BOGGIO RICARDO RAIMUNDO
24122010;01012011;31032011;20002734134;D;S;N;3,00;3,00;00;00;LAVORANO GERARDO TITO


Para el caso creo una base de datos con 12 campos

en visual fox pro se hace

Code: Select all | Expand

APPEND FROM (cArchivo) DELIMITED WITH CHARACTER ";"


en harbour como hago para que funcione ya hice varias pruebas y no logre hacerlo me da el siguiente error

Error description: Error DBCMD/1005 Error de argumento: __DBAPP

Stack Calls
===========
Called from: => __DBAPP( 0 )
Called from: source\rdd\dbdelim.prg => __DBDELIM( 0 )
Called from: origen.prg => LEO( 691 )

una de las pruebas que hice fue encontrada en internet

Code: Select all | Expand

 
cDefEol := SET( _SET_EOL, chr( 13 ) )
APPEND FROM ( cArchivo ) DELIMITED WITH PIPE
APPEND FROM ( cArchivo ) DELIMITED WITH ( { "|","|" } )
SET( _SET_EOL, cDefEol )


le cambié | por , y ; tambuién me dió el mismo error



Muchas Gracias

Re: append from

Posted: Mon Jun 23, 2014 2:07 pm
by karinha

Re: append from

Posted: Mon Jun 23, 2014 2:54 pm
by surGom
Gracias karinha lo implemente


Code: Select all | Expand


local cArchivo := cGetfile( "archivo(*.txt) |*.txt|", "Seleccionar archivo" )
use padroncf
zap

SET DELIMITER ON
SET DELIMITERS TO ";"
//cDefEol := SET( _SET_EOL, chr( 13 ) )
APPEND FROM ( cArchivo )  

//SET( _SET_EOL, cDefEol )  
 

SET DELIMITERS TO
SET DELIMITER OFF

DBCloseArea()
return nil




y ahora me da el error

Error description: Error DBFCDX/1012 Se detectó corrupción: E:\fivehme\dgrentas\Padron_alto_riesgo_primertrim_2011.txt

Stack Calls
===========
Called from: => __DBAPP( 0 )
Called from: origen.prg => LEO( 693 )


Achiqué el tamaño del archivo deje solamente 30 renglones , cambiando ";" por "," que por defecto según tengo entendido lo lee clipper o harbour, y me da el mismo error de corrupción. Le cambié el nombre "Padron_alto_riesgo_primertrim_2011.txt" por "padron.txt" y lo mismo ????

Aclaro que se baja un zip y se descomprime y lo que aquí no se lee en la rutina de visual fox pro sin problemas se ejecuta

luis

Re: append from

Posted: Mon Jun 23, 2014 3:01 pm
by karinha
Se detectó corrupción

Intente asi:

Code: Select all | Expand


   use padroncf EXCLUSIVE NEW
   zap
 

Re: append from

Posted: Mon Jun 23, 2014 3:12 pm
by karinha
Ejemplo:

Code: Select all | Expand


   USE Sales EXCLUSIVE NEW

   IF !NETERR()
      SET INDEX TO Sales, Branch, Salesman
      __dbZAP()
      CLOSE Sales
   ELSE
      ? "Zap operation failed"
      BREAK
   ENDIF
 


Saludos

Re: append from

Posted: Mon Jun 23, 2014 10:22 pm
by cmsoft
Yo lo solucione de esta forma, no se si sera muy elegante pero funciona bien.
Creo una tabla con el formato de los campos y de los puntos y coma ;
Ejemplo para tu caso: 24122010;01012011;31032011;20002729874;D;S;N;3,00;3,00;00;00;MOURI¦O GUILLERMO ANTONIO

Code: Select all | Expand


CAMPO1 C 8
PYC1 C 1
CAMPO2 C 8
PYC2 C 1
...
 

.... Y asi con todos los campos
Luego uso la siguiente instucción:

Code: Select all | Expand

APPEND FROM (cArchivo) SDF

Re: append from SOLUCIONADO

Posted: Mon Jun 23, 2014 10:56 pm
by surGom
Cmsoft Tu solución funcionó perfecto y en solo 6 segundos muchísimas gracias.
Muchas Gracias también a Karinha, hice los cambios que sugirío pero me seguía dando corrupción del archivo txt.

Ahora voy a poder utilizar en los tres casos que necesito usar esos txt sin necesidad de llamar a una función externa

Luis