FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Buscar en archivo txt
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM

Buscar en archivo txt

Posted: Wed Nov 28, 2007 12:58 AM

La Direcci贸n General de Rentas de Provincia de Buenos Aires de nuestro pa铆s no tuvo mejor idea que hacer un padr贸n con lo que hay que cobrar
a cada contribuyente de percepciones 贸 retenciones, siendo nosotros agente recaudador de ellos (S铆 Argentina bendito pa铆s),
antes eran al铆cuotas fijas, pero a alg煤n genio se le ocurri贸 hacerla m谩s complicada (no tenemos nada que hacer)
y lo hizo que cada contribuyente pague distinto. Para ello o se baja el padr贸n o bien cada vez que cobras a un cliente o pag谩s
a un proveedor entras a internet buscas el nro de Cuit (1) buscas los porcentajes a aplicar y pod茅s facturar 贸 cobrar...
(chino mandarin!!! es mas f谩cil de aprender que ejecutar esto para una empresa que hade 60 facturas por d铆a)
贸 bien bajas el padr贸n de internet, y hac茅s un prg que lea y encuentre las al铆cuotas.
Necesito buscar del padron los clientes que pertenezcan a mi empresa los cuales identifico con los n煤meros
posteriores al 3潞 punto y coma (1) y de ah铆 extraer los datos de que necesito, pensaba utilizar memoread, etc pero tengo
la limitaci贸n de 64k. Pens茅 en utilizar la clase txt, pero no prob茅 todav铆a, ya que no lo veo claro. Quiz谩s con Fread?
Me pueden orientar que puedo utilizar.

son en total 1323270 renglones 82megabytes una bicoca
Los primeros renglones son los siguientes

21112007;01122007;31122007;20000000028;D;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000013677;D;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000091635;D;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000125327;C;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000188426;C;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000282465;D;S;N;0,00;0,00;01;01

Disculpen lo largo de la explicaci贸n.

Luis

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Buscar en archivo txt

Posted: Wed Nov 28, 2007 08:09 AM

Luis,

Puedes usar perfectamente MemoRead() y luego At(), ya que en 32 bits no existe la limitaci贸n de los 64 Ks y los ordenadores 32 bits de hoy en dia tienen memoria de sobra para cargar ficheros grandes (hasta 4 GB) en memoria

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM

Buscar en archivo txt

Posted: Wed Nov 28, 2007 10:07 AM

Gracias Antonio, cuando ven铆a hacia la oficina se me ocurri贸 que pod铆a ser como con los array, pero nada mejor que me lo confirmen.

Luis

Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM

Buscar en archivo txt

Posted: Sun Dec 02, 2007 11:12 AM

Bueno pude leer archivos txt y utilizando la funci贸n StrToken estraer lo necesario, pero en archivos peque帽os. El que necesitaba es de 82 megas, no pude. Utilizando mlcount, me lee los renglones y eso me dio falsas expectativas porque al querer leerlo se queda sin hacer nada, permitiendo entrar a otras 谩reas del programa como si nada ocurriese, pero al cerrar el programa lo hace pero quedando en memoria una copia del mismo.

La soluci贸n que hall茅 fue pasar el txt a acces y de ah铆 a dbf. Lo que implic贸 tener que quitar campos no imprescindibles pero s铆 buenos complementos de informaci贸n, luego modificar la anchura de campos (demoraba casi 10 minutos), ya que el archivo original que ven铆a de acces a dbf era de 450 megas!!!.

La cuesti贸n es que esto hay que hacerlo todos los meses y necesitar铆a saber si alguien tiene idea de como puedo leer el archivo usando mi programa , o en su defecto hacer un externo. Quise con fread pero no se como buscar y extraer. Y si es esta la soluci贸n.
Espero sus comentarios

EJ de como lee archivos txt Esto funcion贸 perfecto hasta 28000 bytes, luego de eso lo comentado

do

 cLinea := memoline(cTexto,60,z)
 cCuit :=  STRTRAN(odbf:cuit, "-", "")
 if substr(cLinea,28,11 ) = cCuit
    ?  "HOLA"
MsgInfo( StrToken( cTexto,  9, ";" ) )
odbf:skip()
? odbf:cuit
        return
  endif 
  sysrefresh()

   z := z +1

until z = nCuento .or. odbf:eof()

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Buscar en archivo txt

Posted: Sun Dec 02, 2007 12:06 PM
MemoLine() es una funci贸n muy lenta ya que busca la l铆nea desde el principio del texto, una y otra vez.

Hazlo de esta manera:
// nFrom hay que pasarlo por referencia "@" y empieza valiendo 1

function ExtractLine( cText, nFrom )

  local cLine, nAt

  nAt := At( CRLF, SubStr( cText, nFrom ) )

  if nAt > 0
    cLine := Substr( cText, nFrom, nAt - 1 )
    nFrom += nAt + 1
  else
    cLine := Substr( cText, nFrom )
    nFrom := Len( cText ) + 1
  endif

return cLine
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 299
Joined: Mon Oct 22, 2007 03:03 PM

Buscar en archivo txt

Posted: Mon Dec 03, 2007 04:02 PM

ESTE ES UN FUENTE PARA LEER ARCHIVOS DE TEXTO, ESPERO QUE TE SIRVA DE ALGO

PARAM ARCH_DIC
MAXLINE=512
HANDLE=FOPEN(ARCH_DIC)
DO WHILE .T.
BUFFER=SPACE(MAXLINE)
NUM_BYTES=FREAD(HANDLE,@BUFFER ,MAXLINE)
LINE_END=AT(CHR(13)+CHR(10),BUFFER)
IF LINE_END#0

? SUBSTR(BUFFER,1,LINE_END)

FSEEK(HANDLE,LINE_END+1-NUM_BYTES,1)

ELSE
FSEEK(HANDLE,0)
EXIT
ENDIF
ENDDO
FCLOSE(ARCH_DIC)

Saludos



Angel, Valencia, Venezuela



xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM

Buscar en archivo txt

Posted: Tue Dec 04, 2007 03:48 PM

Antonio con el c贸digo que me enviaste prob茅 con un archivo de 7 megas y lo lee perfecto, lo 煤nico es que demora unos 12 minutos. Lo que not茅 que a medida que avanza la lectura, m谩s r谩pido resuelve. El archivo completo tiene 82 megas, es decir intratable. no s贸lo para el programa de fwh sino que tambi茅n para editplus2, ya que quise cambiar los ; por comas y quitar las comas en los num茅ricos, para poder exportarlo a dbf y tamb铆en se satura y cuelga???. Lo que quisiera saber si hay alg煤n idioma ya sea c++, delphi, visualbasic ,etc , que lo pueda leer y trabajar en el mismo sin salir del c贸digo de programa.

Voy a probar con la soluci贸n que me envi贸 ADBLANCO a ver que pasa.
Me interesar铆a saber lo de otros idiomas por curiosidad

Gracias
Espero sus comentarios

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Buscar en archivo txt

Posted: Tue Dec 04, 2007 06:09 PM

La m谩xima velocidad la conseguir铆as escribiendo una funci贸n especifica en lenguaje C que haga el trabajo, sin tener que subir a nivel PRG.

El lenguaje C se traduce directamente a ensamblador. Y el ensamblador es el lenguaje m谩s r谩pido (c贸digo m谩quina) :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM

Buscar en archivo txt

Posted: Wed Dec 05, 2007 02:48 PM

Estimados

Y si esa informacion en Texto de alguna forma se puede convertir a una tabla dbf la cual podemos perfectamente maipular no seria mejor.

por ejemplo

21112007;01122007;31122007;20000000028;D;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000013677;D;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000091635;D;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000125327;C;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000188426;C;S;N;6,00;1,75;15;10
21112007;01122007;31122007;20000282465;D;S;N;0,00;0,00;01;01

se podria utilizar un COPY DELIMITED por ejemplo.

salu2
carlos vargas

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM

Buscar en archivo txt

Posted: Wed Dec 05, 2007 02:53 PM

Antonio

En XBase++ tienen un RDD que permite manipular Archivos delimitados como si de una tabla se tratase, usando USE, BROWSE, SKIP, GO.. Tec.

no se pudiera implementar algo similar en harbour.

NOTA, si pueden enviarme el txt comprimido podria intentar encontrar la forma.

karlos.vargas AT gmail.com

salu2
carlos vargas.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Buscar en archivo txt

Posted: Wed Dec 05, 2007 03:04 PM

Carlos,

Luis est谩 buscando el sistema m谩s r谩pido posible, ya que el fichero es muy grande.

En esos casos es donde hace falta el lenguaje C, ya que es sin duda, el m谩s r谩pido de todos :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion