Importar a DBF desde CSV

Post Reply
postinelli
Posts: 128
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Importar a DBF desde CSV

Post by postinelli »

intento importar desde un reporte que recibo en CSV y no logro hacerlo

seguramente sea simple, pero no lo he logrado

intente con memoread, pero no funciona al tener distintos largos la lineas

intente APPEND FROM "source.csv" DELIMITED WITH ( { '"', ";" } ) y tampoco

agradezco a quien pueda hecharme una mano

este es el CSV que recibo

FECHA DE OPERACIÓN FECHA DE PRESENTACIÓN FECHA DE PAGO N° DE CUPÓN N° DE COMERCIO N° TARJETA MONEDA TOTAL BRUTO TOTAL DESCUENTO TOTAL NETO ENTIDAD PAGADORA CUENTA BANCARIA N° LIQUIDACIÓN TIPO DE LIQUIDACIÓN ESTADO CUOTAS N° DE AUTORIZACIÓN TARJETA
09/10/2019 09/10/2019 11/10/2019 52 23643331 " 5016" ARS 1.770,00 17,7 1.752,30 BANCO SANTANDER 3691926 133011 Liquidado 0 740370 VISA DEBIT
08/10/2019 08/10/2019 10/10/2019 16 23643331 " 9009" ARS 1.800,00 18 1.782,00 BANCO SANTANDER 3691926 132917 Liquidado 0 593656 VISA DEBIT
08/10/2019 08/10/2019 10/10/2019 15 23643331 " 9009" ARS 2.260,00 22,6 2.237,40 BANCO SANTANDER 3691926 132917 Liquidado 0 593088 VISA DEBIT
07/10/2019 08/10/2019 10/10/2019 14 23643331 " 0029" ARS 3.000,00 30 2.970,00 BANCO SANTANDER 3691926 132917 Liquidado 0 164768 VISA DEBIT
07/10/2019 08/10/2019 10/10/2019 51 23643331 " 4020" ARS 3.750,00 37,5 3.712,50 BANCO SANTANDER 3691926 132917 Liquidado 0 528856 VISA DEBIT
07/10/2019 08/10/2019 10/10/2019 50 23643331 " 4020" ARS 1.080,00 10,8 1.069,20 BANCO SANTANDER 3691926 132917 Liquidado 0 528587 VISA DEBIT
nanoespinoza
Posts: 105
Joined: Thu Mar 16, 2017 4:08 pm
Location: Ecuador

Re: Importar a DBF desde CSV

Post by nanoespinoza »

Estimado:

Pruebe así, además revise la documentación de APPEND FROM:

cFileCSV="Copa-América.csv"
APPEND FROM &RUTTMP.&cFileCSV DELIMITED WITH PIPE // Chr(9)

Saludos

Fernando Espinoza A.
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Importar a DBF desde CSV

Post by jvtecheto »

Hola postinelli.

Cierto que no realiza la importacion correctamente,

la unica manera que he conseguido que la realice es asi.

Primero se formatea el .csv con macros, o reemplazar , yo utilizo notepad++
y dejarlo delimitado con blancos, para ellos se une BANCOSANTANDER y TARJETADEBIT
Y _ que recogen los datos que sean todos texto.
Mira el codigo.

Code: Select all


FUNCTION Main()

SET DATE TO FRENCH

 IF !file("Operacio.dbf" )
 dbCreate( "Operacio.dbf", { { "fechope","C", 8, 0  }, ;
                             { "fechprese","C", 8, 0  }, ;
                             { "fechpago","C", 8, 0  }, ;
                             { "numcup", "C", 2, 0  }, ;
                             { "numcomer","C", 8, 0  }, ;
                             { "numtarj","C", 4, 0  }, ;
                             { "moneda","C", 3, 0  }, ;
                             { "totalbrut","C", 12, 0  }, ;
                             { "totaldesc","C", 12, 0  }, ;    
                             { "totalnet","C", 12, 0  }, ;
                             { "entpag","C", 25, 0  }, ;
                             { "ctabanc","C", 7, 0  }, ;
                             { "numliq","C", 6, 0  }, ;
                             { "tipoliq","C", 15, 0  }, ;
                             { "estcuotas","C", 1, 0  }, ;
                             { "numaut","C", 6, 0  }, ;
                             { "tarjeta","C", 15, 0  } } )
                             
 ENDIF
  USE Operacio ALIAS "Ope" NEW
  APPEND FROM operacio.csv DELIMITED WITH BLANK
   
   XBROWSER "Ope" TITLE "Listado operaciones con tarjeta" COLUMNS "fechope" ,"Numcup", "totalbrut","tarjeta", "estcuotas"
   
Return Nil   
 
Asi lo hace bien, pero tenemos que convertir los 3 _ a fecha y los totaldesc , etc a numericos con 2 decimales

lo puedes formatear y pasarlo a otra database ya con campos correctos, no lo
he probado pero supongo que no habra problema.

En fin no he podido conseguir mas.

Saludos.

Jose.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Importar a DBF desde CSV

Post by jvtecheto »

Hola amigo:

Comprobado que convierte bien, mira el fichero yo lo dejo asi de la manera que te explique
con el Notepad++, cuesta muy poco. Reemplazar o macros

Code: Select all

09/10/2019 09/10/2019 11/10/2019 52 23643331   5016  ARS 1770.00 17.7 1752.30 BANCOSANTANDER 3691926 133011 Liquidado 0 740370 VISADEBIT
08/10/2019 08/10/2019 10/10/2019 16 23643331   9009  ARS 1800.00 18 1782.00 BANCOSANTANDER 3691926 132917 Liquidado 0 593656 VISADEBIT
08/10/2019 08/10/2019 10/10/2019 15 23643331   9009  ARS 2260.00 22.6 2237.40 BANCOSANTANDER 3691926 132917 Liquidado 0 593088 VISADEBIT
07/10/2019 08/10/2019 10/10/2019 14 23643331   0029  ARS 3000.00 30 2970.00 BANCOSANTANDER 3691926 132917 Liquidado 0 164768 VISADEBIT
07/10/2019 08/10/2019 10/10/2019 51 23643331   4020  ARS 3750.00 37.5 3712.50 BANCOSANTANDER 3691926 132917 Liquidado 0 528856 VISADEBIT
07/10/2019 08/10/2019 10/10/2019 50 23643331   4020  ARS 1080.00 10.8 1069.20 BANCOSANTANDER 3691926 132917 Liquidado 0 528587 VISADEBIT
 
guardalo con "operacio.csv"
Luego le aplico este codigo.

Code: Select all

#include "fivewin.ch"

FUNCTION Main()

   LOCAL dFechope:= CTOD(""),dFechprese:=CTOD(""),dFechpago:=CTOD(""),cNumcup:= Space(2),cNumcomer:=Space(8), ;
         cNumtarj:= Space(4),cMoneda:=Space(3),nTotalbrut:=0,nTotaldesc:=0,nTotalnet:=0,cEntpag:=Space(25), ;
         cCtabanc:=Space(7),cNumliq:=Space(6),cTipoLiq:=Space(15),cEstcuotas:=Space(1),cNumaut:=Space(6),cTarjeta:=Space(15)
         
   SET DATE TO FRENCH
   SET DECIMALS TO 2
   SET FIXED ON      
   
   IF !file("Operacio.dbf" )
   dbCreate( "Operacio.dbf", { { "fechope","C", 8, 0  }, ;
                             { "fechprese","C", 8, 0  }, ;
                             { "fechpago","C", 8, 0  }, ;
                             { "numcup", "C", 2, 0  }, ;
                             { "numcomer","C", 8, 0  }, ;
                             { "numtarj","C", 4, 0  }, ;
                             { "moneda","C", 3, 0  }, ;
                             { "totalbrut","C", 12, 0  }, ;
                             { "totaldesc","C", 12, 0  }, ;    
                             { "totalnet","C", 12, 0  }, ;
                             { "entpag","C", 25, 0  }, ;
                             { "ctabanc","C", 7, 0  }, ;
                             { "numliq","C", 6, 0  }, ;
                             { "tipoliq","C", 15, 0  }, ;
                             { "estcuotas","C", 1, 0  }, ;
                             { "numaut","C", 6, 0  }, ;
                             { "tarjeta","C", 15, 0  } } )
   ENDIF
   IF !file("Operacio2.dbf" )
   dbCreate( "Operacio2.dbf", { { "fechope","D", 8, 0  }, ;
                             { "fechprese","D", 8, 0  }, ;
                             { "fechpago","D", 8, 0  }, ;
                             { "numcup", "C", 2, 0  }, ;
                             { "numcomer","C", 8, 0  }, ;
                             { "numtarj","C", 4, 0  }, ;
                             { "moneda","C", 3, 0  }, ;
                             { "totalbrut","N", 12, 2  }, ;
                             { "totaldesc","N", 12, 2  }, ;    
                             { "totalnet","N", 12, 2  }, ;
                             { "entpag","C", 25, 0  }, ;
                             { "ctabanc","C", 7, 0  }, ;
                             { "numliq","C", 6, 0  }, ;
                             { "tipoliq","C", 15, 0  }, ;
                             { "estcuotas","C", 1, 0  }, ;
                             { "numaut","C", 6, 0  }, ;
                             { "tarjeta","C", 15, 0  } } )                          
                             
   ENDIF
 
   USE Operacio ALIAS "Ope" NEW
   APPEND FROM operacio.csv DELIMITED WITH BLANK
  
   USE Operacio2 ALIAS "Ope2" NEW
   Ope->(DbGotop())
   WHILE !Ope->(EOF())
      Ope2->(DBAppend())
      
      dFechope := CTOD(Ope->fechope)
      Ope2->fechope := dFechope
      dFechprese := CTOD(Ope->fechprese)
      Ope2->fechprese := dFechprese
      dFechpago := CTOD(Ope->fechpago)
      Ope2->fechpago := dFechpago
      cNumcup := Ope->numcup
      Ope2->numcup := cNumcup
      cNumcomer := Ope->numcomer
      Ope2->numcomer := cNumcomer
      cNumtarj := Ope->numtarj
      Ope2->numtarj := cNumtarj
      cMoneda := Ope->moneda
      Ope2->moneda := cMoneda
      nTotalbrut := Val(Ope->totalbrut)
      Ope2->totalbrut := nTotalBrut
      nTotaldesc := Val(Ope->totaldesc)
      Ope2->totaldesc := nTotaldesc
      nTotalnet := Val(Ope->totalnet)
      Ope2->totalnet := nTotalnet
      cEntpag := SubStr(Ope->Entpag,1,5) + " " + SubStr(Ope->entpag,6)
      Ope2->entpag := cEntpag
      cCtabanc := Ope->ctabanc
      Ope2->ctabanc := cCtabanc
      cNumliq := Ope->numliq
      Ope2->numliq := cNumliq
      cTipoliq := Ope->tipoliq
      Ope2->tipoliq := cTipoliq
      cEstcuotas := Ope->estcuotas
      Ope2->estcuotas := cEstCuotas
      cNumaut := Ope->numaut
      Ope2->numaut := cNumaut
      cTarjeta := SubStr(Ope->tarjeta,1,4) + " " + SubStr(Ope->tarjeta,5)
      Ope2->tarjeta := cTarjeta
      
      Ope->( dbskip() )
   END
   DbCloseAll()
   FERASE("Operacio.dbf")
   FRENAME("operacio2.dbf","operacio.dbf")
   USE Operacio ALIAS "Ope" NEW
   
   XBROWSER "Ope" TITLE "Listado operaciones con tarjeta" COLUMNS "fechope" ,"Numcup", "totalbrut", "totalnet","tarjeta", "estcuotas"
   
Return Nil   
 
si no encuentas nada mejor .....

Saludos

Jose.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
postinelli
Posts: 128
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Importar a DBF desde CSV

Post by postinelli »

Gracias José
postinelli
Posts: 128
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Importar a DBF desde CSV

Post by postinelli »

asi logré hacerlo

Code: Select all

function Main()

Local cBuf
Local aData, aHeaders
Local nbrut:=0


set date french
set epoch to 1950
set century on

cBuf := MemoRead( 'posnet.csv' )
// parse and make a multi dimentional array

if Right( cBuf, 2 ) != CRLF
// pad with CRLF if needed, not to miss the last line
   cBuf += CRLF
endif

cBuf := StrTran( cBuf, CRLF, Chr( 10 ) )
aData := hb_aTokens( cBuf, Chr(10) )
AEval( aData, { |c,i| aData[ i ] := hb_aTokens( c, ';' ) } )
aHeaders := aData[ 1 ]
aData := ADel( aData, 1 )
aSize( aData, Len( aData ) - 1 )
// Parsing is done

// Extending the program to Write DBF
WriteToDBF( 'posnet.DBF', aData, aHeaders )

// Check the DBF
USE posnet
XBrowse()
-----------------------------------------
static function WriteToDBF( cDbf, aData, aHeaders )

local aStruct := {}
local n, nLen := Len( aData )
USE ( cDbf ) NEW ALIAS OUT EXCLUSIVE
zap

for n := 1 to nLen
   OUT->( dbAppend() )
   AEval( aData[ n ], { |c,i| OUT->( FieldPut( i, c ) ) } )
next

OUT->( dbCloseArea() )


return nil

*/
 
Post Reply