Leer archivos zip desde VFP

214 views
Skip to first unread message

Roberto Lemos

unread,
Nov 19, 2012, 8:17:58 AM11/19/12
to publice...@googlegroups.com
Buenos dias a todos.
 
Tengo una serie de archivos TXT, los cuales me mandan diariamente en archivos comprimidos.
 
Mi pregunta es existe alguna forma de automatizar esto, he visto algunos ejemplos en el foro que funcionan, pero lo que quiero hacerlo es directamente por programa,
me llegan casi 50 archivos zip, de los cuales los nombres varian, y lo otro es, como hacer que el VFP lea los archivos TXT una vez extraídos, obviando la primera linea que es la cabecera.
 
Saludos
 
Roberto Lemos
 

Roberto Lemos

unread,
Nov 19, 2012, 8:43:27 AM11/19/12
to publice...@googlegroups.com
Utilizando el ejemplo del amigo Patricio, hice esto


SET PATH TO “C:\Archivos de Programa\WinRAR” additive
#define SW_SHOW_HIDDEN 0
gcComando = "winrar x c:\Sistemas\Zip\*.zip c:\Sistemas\Txt\"
oShell = CreateObject("WScript.Shell")
oShell.Run(gcComando, SW_SHOW_HIDDEN, .T.)



Con esto ya tengo los archivos .TXT extraídos en la carpeta c:\Sistemas\Txt.

Ahora quisiera saber una forma de leerlos desde VFP.

Saludos

Roberto Lemos
--



Luis Maria Guayan

unread,
Nov 19, 2012, 8:49:28 AM11/19/12
to publice...@googlegroups.com
Para leer los archivos de una carpeta lo puedes hacer con:

1) ADIR()
Ej:
FOR ln = 1 TO ADIR(laFiles, "C:\Sistemas\Txt\*.TXT")
  ? laFiles(ln,1)

ENDFOR


2) SYS(2000)
Ej:
lc = SYS(2000, "
C:\Sistemas\Txt\*.TXT")
DO WHILE NOT EMPTY(lc)
  ? lc
  lc = SYS(2000, "
C:\Sistemas\Txt\*.TXT", 1)
ENDDO


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Roberto Lemos

unread,
Nov 19, 2012, 9:14:37 AM11/19/12
to publice...@googlegroups.com
Gracias x le respuesta, obtengo los nombres del archivos, pero como los leo, he echo esto y me da error
 
Use Temporal
FOR ln = 1 TO ADIR(laFiles, "C:\Sistemas\Txt\*.TXT")
     nArchivo= laFiles(ln,1)
     APPE FROM  &nArchivo DELIMITED WITH CHARACTER |
ENDFOR
Me sale archivo no existe
--
 
 
 

Luis Maria Guayan

unread,
Nov 19, 2012, 9:18:14 AM11/19/12
to publice...@googlegroups.com
APPE FROM  (nArchivo) DELIMITED WITH CHARACTER |


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

--
 
 
 

Roberto Lemos

unread,
Nov 19, 2012, 9:29:59 AM11/19/12
to publice...@googlegroups.com
El  nombre de la variable entre paréntesis?, tampoco funciona igual sale archivo no existe
--
 
 
 

Víctor Hugo Espínola Domínguez

unread,
Nov 19, 2012, 9:44:35 AM11/19/12
to publicesvfoxpro
Hola Roberto

Prueba lo siguiente:

Use Temporal
FOR ln = 1 TO ADIR(laFiles, "C:\Sistemas\Txt\*.TXT")
     nArchivo= laFiles(ln,1)
     nArchivo = "C:\Sistemas\Txt\" + nArchivo
     APPE FROM  &nArchivo DELIMITED WITH CHARACTER |
ENDFOR

Saludos.
Víctor.



--
 
 
 

Pato

unread,
Nov 19, 2012, 9:48:54 AM11/19/12
to publice...@googlegroups.com
Hola Roberto, probando el comando ADIR(laFiles, "C:\Sistemas\Txt\*.TXT") , fíjate si el resultado de la variable laFiles es solo el nombre del txt y no el nombre con la ubicación completa del archivo , o sea por ejemplo te da archivo.txt y no "C:\Sistemas\Txt\archivo.TXT.
 
Por eso no lo encuentra cuando haces el append, creo.
 
Patricio
--
 
 
 

Roberto Lemos

unread,
Nov 19, 2012, 9:57:49 AM11/19/12
to publicesvfoxpro
Gracias Victor Hugo, es exactamente como lo hice y funciono
 
nArchivo="c:\Sistemas\Txt\"+laFiles(ln,1)
APPE FROM &nArchivo DELIMITED WITH CHARACTER |
 
ahora para terminar, alguna forma de no leer la cabecera, la primera línea, por el momento lo que hago es en la BD temporal, borra las filas igual a la cabecera, algo asi.
 
Dele for Campo=’NombredelCampo’
 
 
 
 
Saludos
 
Roberto Lemos.
--
 
 
 

FidelJ

unread,
Nov 19, 2012, 10:48:56 AM11/19/12
to publice...@googlegroups.com
Agregando la función GetFopen(), puedes intentar lo siguiente:

Use Temporal
FOR ln = 1 TO ADIR(laFiles, "C:\Sistemas\Txt\*.TXT")
     lcArchivo = "C:\Sistemas\Txt\" + laFiles(ln,1)
     nfop=-1
     lcFile=ADDBS(JUSTPATH(lcArchivo))+JUSTSTEM(lcArchivo)+"1."+JUSTEXT(lcARchivo)
     
     IF getfopen(lcARchivo,@nfop,.t.,12)  && abre el archivo original
      nFap=FCREATE(lcFile)
=FGETS(nfop,2048) && salta primer linea
DO WHILE !FEOF(NFOP)
=FPUTS(nfap,FGETS(nfop,2048))   && copia por línea
enddo
=FCLOSE(nfop)        && cierra original
=FCLOSE(nfap)        && cierra copia  
ENDIF
    APPE FROM  &lcFile DELIMITED WITH CHARACTER |       && append from sobre la copia
ENDFOR


Procedure GetFopen(xcFile,npfop,xlNotVerb,nPrivileg)
********************************
*lGet=GetFopen(addbs(dtemp)+"archivo.txt",@nfop,lNotVerb)
*************************************************************
local cArchivo,lRet
if vartype(nPrivileg)#"N"
nPrivileg=0
endif
cArchivo=xcFile
lREt=.t.
IF !file(cArchivo)
if !xlNotVerb
           Messagbox("El archivo &cArchivo no existe")
endif
lREt=.f.
endif
if lRet
npfop=fopen(cARchivo,nPrivileg)
if npfop=-1
if !xlNotVerb
Messagebox("El archivo &cArchivo no pudo abrirse")
endif
lREt=.f.
endif
endif
if lRet
gnEnd=Fseek(npfop,0,2)
gntop=Fseek(npfop,0)
if gnEnd<=0
if !xlnotVerb
Messagebox("El archivo &cArchivo no tiene contenido")
endif
fclose(npfop)
lRet=.f.
endif
endif
return lret
ENDPROC

Walter R. Ojeda Valiente

unread,
Nov 19, 2012, 11:00:14 AM11/19/12
to publice...@googlegroups.com
Utiliza la función FILETOSTR()

Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House



> --
>
>
>

Luis Maria Guayan

unread,
Nov 19, 2012, 1:03:31 PM11/19/12
to publice...@googlegroups.com
Puedes usar esta función Adir() Extendida

-- Una funcion ADIR() Extendida que devuelve los nombres de los archivos con la ruta completa --
http://www.portalfox.com/article.php?sid=85


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

--
 
 
 

Reply all
Reply to author
Forward
0 new messages