Importar a DBF desde CSV

Importar a DBF desde CSV

Postby postinelli » Tue Oct 15, 2019 1:56 pm

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
postinelli
 
Posts: 149
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: Importar a DBF desde CSV

Postby nanoespinoza » Fri Oct 18, 2019 4:05 pm

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.
nanoespinoza
 
Posts: 141
Joined: Thu Mar 16, 2017 4:08 pm
Location: Ecuador

Re: Importar a DBF desde CSV

Postby jvtecheto » Fri Oct 18, 2019 7:56 pm

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 los campos que recogen los datos que sean todos texto.
Mira el codigo.

Code: Select all  Expand view  RUN


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 primeros campos 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 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Importar a DBF desde CSV

Postby jvtecheto » Sat Oct 19, 2019 10:48 am

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  Expand view  RUN

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  Expand view  RUN

#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 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Importar a DBF desde CSV

Postby postinelli » Mon Oct 21, 2019 1:02 pm

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

Re: Importar a DBF desde CSV

Postby postinelli » Mon Oct 21, 2019 8:52 pm

asi logré hacerlo

Code: Select all  Expand view  RUN
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

*/
 
postinelli
 
Posts: 149
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 48 guests