Problema Importando archivo de Texto

471 views
Skip to first unread message

Pato

unread,
Mar 12, 2012, 5:16:51 PM3/12/12
to publice...@googlegroups.com
Hola gente, tengo este problema a ver si alguien me puede ayudar.
Tengo que leer en mi sistema archivos de texto, que estan compuestos de registros de 279 caracteres por linea de largo fijo, no hay separadores.
 
uso el codigo de ejemplo

STORE FOPEN

('archivo.txt') TO gnFileHandle

STORE FSEEK

(gnFileHandle, 0, 2) TO gnEnd

STORE FSEEK

(gnFileHandle, 0) TO gnTop

gcString =

FGETS(gnFileHandle, gnEnd)

?gcString

=

FCLOSE(gnFileHandle)

Ahora en un archivo con 12 registros no tengo problemas, con otro de 39  o mayor me tira un error,”El valor, tipo o numero de argumentos no es valido para la función“. Puede ser que el error sea por el tamaño de los archivos?, tengo que usar algún parámetro especial, o usar otras funciones para importar el archivo.

Desde ya muchas gracias por la ayuda.

 

Walter R. Ojeda Valiente

unread,
Mar 12, 2012, 5:23:41 PM3/12/12
to publice...@googlegroups.com
¿En cuál línea tienes el error?

¿Tu archivo no tiene un caracter de fin de archivo EOF, chr(26) en alguna línea?

Saludos.

Walter.





From: sys...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Problema Importando archivo de Texto
Date: Mon, 12 Mar 2012 18:16:51 -0300

Hola gente, tengo este problema a ver si alguien me puede ayudar.
Tengo que leer en mi sistema archivos de texto, que estan compuestos de registros de 279 caracteres por linea de largo fijo, no hay separadores.
 
uso el codigo de ejemplo
STORE FOPEN('archivo.txt') TO gnFileHandle
STORE FSEEK(gnFileHandle, 0, 2) TO gnEnd
STORE FSEEK(gnFileHandle, 0) TO gnTop

Pato

unread,
Mar 12, 2012, 5:33:35 PM3/12/12
to publice...@googlegroups.com
Hola Walter, me tira el error cuando ejecuto el comando
 

gcString = FGETS(gnFileHandle, gnEnd)

 
solo pasa como te digo en los archivos que superen cierta cantidad de registros por lo menos 39 lineas. en los archivos con pocas lineas me devuelve los datos perfectamente.
 
Te adjunto uno que funciona bien .305 y otro que me da error .307 (son archivos de texto).
 
Saludos
0875050312.305
0875070312.307

Walter R. Ojeda Valiente

unread,
Mar 12, 2012, 5:50:19 PM3/12/12
to publice...@googlegroups.com
Pues no sé que problemas tendrás porque con el siguiente programita lo leí de lo más bien, completo y sin problemas:

Local lnFp, lcLinea
 
  lnFp = FOpen("DATOS.TXT", 2)
 
  ? lnFp
  ?
 
  do while !FEOF(lnFp)
    lcLinea = FGets(lnFp)
    ? lcLinea
  enddo
 
  =FClose(lnFp)
 
Return
*
*

Saludos.

Walter.





From: sys...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Problema Importando archivo de Texto
Date: Mon, 12 Mar 2012 18:16:51 -0300

Hola gente, tengo este problema a ver si alguien me puede ayudar.
Tengo que leer en mi sistema archivos de texto, que estan compuestos de registros de 279 caracteres por linea de largo fijo, no hay separadores.
 
uso el codigo de ejemplo
STORE FOPEN('archivo.txt') TO gnFileHandle
STORE FSEEK(gnFileHandle, 0, 2) TO gnEnd
STORE FSEEK(gnFileHandle, 0) TO gnTop

Pato

unread,
Mar 12, 2012, 6:00:39 PM3/12/12
to publice...@googlegroups.com
Gracias Walter esto funciona perfecto, tampoco se cual es el problema alguna limitación de tamaño creo, para los comandos que use.
Saludos y de mi parte muchas gracias por la buena disposición que tenes siempre.
Patricio
 
Sent: Monday, March 12, 2012 6:50 PM

Gorka

unread,
Mar 13, 2012, 3:23:09 AM3/13/12
to Comunidad de Visual Foxpro en Español
Hola Patricio
Según la ayuda de fox:
FGETS( ) devuelve un máximo de 8192 bytes. Si se omite nBytes,
FGETS( ) devuelve de forma predeterminada 254 bytes.

39 registros por 279 caracteres son 10881 Bytes, lo cual supera el
limite.

Cuando haces gcString = FGETS(gnFileHandle, gnEnd) estas leyendo en
un solo Fgets todo el contenido del fichero.
Con el código que te pone Walter hace un Fgets por cada linea de 2279.

Si no quiere usar fopen y fgets puedes usar FILETOSTR()
gcString=FILETOSTR('archivo.txt')

Saludos
Gorka



On 12 mar, 23:00, "Pato" <sysp...@gmail.com> wrote:
> Gracias Walter esto funciona perfecto, tampoco se cual es el problema alguna limitación de tamaño creo, para los comandos que use.
> Saludos y de mi parte muchas gracias por la buena disposición que tenes siempre.
> Patricio
>
> From: Walter R. Ojeda Valiente
> Sent: Monday, March 12, 2012 6:50 PM
> To: publice...@googlegroups.com
> Subject: RE: [vfp] Problema Importando archivo de Texto
>
> Pues no sé que problemas tendrás porque con el siguiente programita lo leí de lo más bien, completo y sin problemas:
>
> Local lnFp, lcLinea
>
>   lnFp = FOpen("DATOS.TXT", 2)
>
>   ? lnFp
>   ?
>
>   do while !FEOF(lnFp)
>     lcLinea = FGets(lnFp)
>     ? lcLinea
>   enddo
>
>   =FClose(lnFp)
>
> Return
> *
> *
>
> Saludos.
>
> Walter.
>
> --------------------------------------------------------------------------- -----
> From: sysp...@gmail.com

Carlos Miguel FARIAS

unread,
Mar 13, 2012, 7:48:12 AM3/13/12
to publice...@googlegroups.com
Fgets lee hasta 8192 caracteres o hasta un retorno de carro.
Si tu archivo de texto tiene retornos de carro, lo correcto sería
hacer un bucle leyendo y cada pasada, te trae los datos de un
registro.
para archivos no muy grandes, podes usar filetostr(), luego con
alines(), separas el archivo en registros, y luego procesas el
arreglo.
En mi caso prefiero fgets, porque me independiza del tamaño del
archivo (he procesado archivos de texto de más de 200 Megabytes) en
una maquina con 256 MB y los tiempos son razonables (el programa
analizaba directorios completos con varios gigabytes de datos
distribuidos en archivos de texto de todo tipo de tamaño).
filetostr() no podría tomar archivos muy grandes, porque estaría
cargando todo el archivo en memoria, en un solo espacio de
direcciones, luego, si tenes que dividirlo en partes para analizarlas
individualmente, implica otro tanto de memoria (el doble), si eso
agota el espacio de memoria directa que el equipo puede aplicar al
programa y tiene que empezar a paginar, el tiempo de respuesta se va,
y no vuelve.
Saludos: Miguel, Santa Rosa (LP)


El 13/03/12, Gorka <gorka...@gmail.com> escribió:

Pato

unread,
Mar 13, 2012, 8:24:33 AM3/13/12
to publice...@googlegroups.com
Si gracias Carlos y Gorka, utilice el ejemplo de Walter, solo agregue 2000 a
nbytes en el FGETS(gcArcTXT,2000), porque dejando el FGETS sin el parametro
nbytes no me devolv�a todo el registro, con 2000 si.
Gracias y saludos.

-----Mensaje original-----
From: Carlos Miguel FARIAS
Sent: Tuesday, March 13, 2012 8:48 AM
To: publice...@googlegroups.com
Subject: Re: [vfp] Re: Problema Importando archivo de Texto

Fgets lee hasta 8192 caracteres o hasta un retorno de carro.

Si tu archivo de texto tiene retornos de carro, lo correcto ser�a


hacer un bucle leyendo y cada pasada, te trae los datos de un
registro.
para archivos no muy grandes, podes usar filetostr(), luego con
alines(), separas el archivo en registros, y luego procesas el
arreglo.

En mi caso prefiero fgets, porque me independiza del tama�o del
archivo (he procesado archivos de texto de m�s de 200 Megabytes) en


una maquina con 256 MB y los tiempos son razonables (el programa
analizaba directorios completos con varios gigabytes de datos

distribuidos en archivos de texto de todo tipo de tama�o).
filetostr() no podr�a tomar archivos muy grandes, porque estar�a


cargando todo el archivo en memoria, en un solo espacio de
direcciones, luego, si tenes que dividirlo en partes para analizarlas
individualmente, implica otro tanto de memoria (el doble), si eso
agota el espacio de memoria directa que el equipo puede aplicar al
programa y tiene que empezar a paginar, el tiempo de respuesta se va,
y no vuelve.
Saludos: Miguel, Santa Rosa (LP)


El 13/03/12, Gorka <gorka...@gmail.com> escribi�:
> Hola Patricio
> Seg�n la ayuda de fox:
> FGETS( ) devuelve un m�ximo de 8192 bytes. Si se omite nBytes,


> FGETS( ) devuelve de forma predeterminada 254 bytes.
>
> 39 registros por 279 caracteres son 10881 Bytes, lo cual supera el
> limite.
>
> Cuando haces gcString = FGETS(gnFileHandle, gnEnd) estas leyendo en
> un solo Fgets todo el contenido del fichero.

> Con el c�digo que te pone Walter hace un Fgets por cada linea de 2279.


>
> Si no quiere usar fopen y fgets puedes usar FILETOSTR()
> gcString=FILETOSTR('archivo.txt')
>
> Saludos
> Gorka
>
>
>
> On 12 mar, 23:00, "Pato" <sysp...@gmail.com> wrote:
>> Gracias Walter esto funciona perfecto, tampoco se cual es el problema

>> alguna limitaci�n de tama�o creo, para los comandos que use.
>> Saludos y de mi parte muchas gracias por la buena disposici�n que tenes


>> siempre.
>> Patricio
>>
>> From: Walter R. Ojeda Valiente
>> Sent: Monday, March 12, 2012 6:50 PM
>> To: publice...@googlegroups.com
>> Subject: RE: [vfp] Problema Importando archivo de Texto
>>

>> Pues no s� que problemas tendr�s porque con el siguiente programita lo
>> le�
>> de lo m�s bien, completo y sin problemas:

>> mayor me tira un error,�El valor, tipo o numero de argumentos no es
>> valido
>> para la funci�n�. Puede ser que el error sea por el tama�o de los
>> archivos?, tengo que usar alg�n par�metro especial, o usar otras

Reply all
Reply to author
Forward
0 new messages