Archivo texto grande

478 views
Skip to first unread message

JesusQuin

unread,
Mar 9, 2016, 9:22:32 AM3/9/16
to Comunidad de Visual Foxpro en Español
Hola todos, necesito pasar a tablas archivo texto superior a 2GB, en este punto las funciones de bajo nivel dejan de funcionar.
¿Existe alguna librería que me permita hacerlo en VFP5?

Saludos, Jesus

Miguel Canchas

unread,
Mar 9, 2016, 9:24:53 AM3/9/16
to publice...@googlegroups.com

Lo mejor es que fracciones los archivos a uno mas pequeño….

 

MK

JesusQuin

unread,
Mar 9, 2016, 9:35:22 AM3/9/16
to Comunidad de Visual Foxpro en Español, mcan...@ximesa.com
Miguel, con que que lo fracciono no se deja abrir ninguna aplicación que conozca.

Arnaldo Toledano

unread,
Mar 9, 2016, 9:43:08 AM3/9/16
to publice...@googlegroups.com
probaste con el EDIT de D.O.S. de Windows ??
Hace tiempo con este editor lograba ordenar correctamente todo tipo de archivos.

Arnaldo Toledano

Elmer Marticorena

unread,
Mar 9, 2016, 9:48:03 AM3/9/16
to publice...@googlegroups.com
Lo puedes hacer con el SplitTextFile.

Fernando D. Bozzo

unread,
Mar 9, 2016, 9:54:04 AM3/9/16
to Comunidad de Visual Foxpro en Español
Hola Jesus, podés usar el objeto Scripting de Windows:

loFSO = CREATEOBJECT("Scripting.FileSystemObject")
loFile1
= loFSO.OpenTextFile(lcArchivo1, 1)
loFile1
.WRITE( lcDatos ) && Escribís tantas veces como necesites, por ejemplo en un SCAN/ENDSCAN
loFile2
.CLOSE()
loFile2
= NULL

El límite que tenés es el del sistema de archivos.

Saludos.-

Fernando D. Bozzo

unread,
Mar 9, 2016, 9:55:30 AM3/9/16
to Comunidad de Visual Foxpro en Español
Donde puse loFile2 va loFile1.

Miguel Canchas

unread,
Mar 9, 2016, 10:32:10 AM3/9/16
to JesusQuin, Comunidad de Visual Foxpro en Español

Note Padd ++

Elmer Marticorena

unread,
Mar 9, 2016, 10:46:29 AM3/9/16
to publice...@googlegroups.com
EL Note Pad ++ no los abre todo, da error al final, prueba con el que te digo SplitTextFile, es muy bueno.

Fernando D. Bozzo

unread,
Mar 9, 2016, 10:59:34 AM3/9/16
to publice...@googlegroups.com

¿Para qué partir un archivo si lo puede tratar entero en una sola pasada?

Carlos Miguel FARIAS

unread,
Mar 9, 2016, 11:31:00 AM3/9/16
to Grupo Fox
El limite de 2 Gb de fox está dado por el sistema de direccionamiento que se desarrollo para xp de 32 bits.
Saludos: Miguel, La Pampa (RA)

Fernando D. Bozzo

unread,
Mar 9, 2016, 1:50:57 PM3/9/16
to publice...@googlegroups.com
Exacto, pero ese límite solamente es para la memoria RAM. Para el disco se manejan otros límites según el sistema de archivos:

Fat32: Hasta 4 GB teóricos
NTFS: 16 TB

Carlos Miguel FARIAS

unread,
Mar 9, 2016, 4:28:18 PM3/9/16
to Grupo Fox
El máximo tamaño de archivo accesible con sentencias de bajo nivel es 2 Gb, ver las consideraciones generales en Visual FoxPro System Capacities de la ayuda de vfp.
Los archivos dbf no pueden superar los 2 Gb.
Lo que es confuso es lo relativo a los límites de los arrays, porque no se entiende si cada elemento del array puede tener 2 gb, o en total.
El tema es simple, VFP se desarrollo en base a 32 bits, con 32 bits se pueden direccionar 4 gb o 2 gb, según se tenga en cuenta el signo o no.
Y esa es una de las razones por la cual, ante requerimientos de usuarios grosos (creo que euro tunnel) M$ no habría querido cambiar el motor a 64 bits, porque si aumentaba el tamaño de las dbfs, competía con SQL Server, y con todo el entorno .net
Saludos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad
Que la Fuerza los acompañe, el maestro Yoda es de 16 bits

Fernando D. Bozzo

unread,
Mar 9, 2016, 5:06:08 PM3/9/16
to publice...@googlegroups.com
Hola Carlos,

Creo que te perdiste el otro post donde puse cómo manipular archivos que pueden superar los 2 GB usando un objeto del Sistema.

Saludos!

Carlos Miguel FARIAS

unread,
Mar 9, 2016, 5:28:33 PM3/9/16
to Grupo Fox
Si Fernando, mi respuesta fue lo que se podía hacer desde fox, si usas alguna funcionalidad del S.O., ya estás usando algo que no es fox, y si el dato lo quiere luego procesar en Fox, siempre tiene la limitación (salvo lo de los arrays que como dije, no entiendo claramente cual es el límite).
Hasta archivos de texto de 300/400 Mb los trabajado con sentencias de bajo nivel, la RAM de la máquina en ese momento no me permitía hacer un FILETOSTR
En algún foro por ahi, decían que los del eurotunnel tenían fraccionadas las tablas en subtablas de menos de 2 Gb y podían habrirlas con SQL con tal que el cursor no superara los 2 Gb.
Saludos: Miguel, La Pampa (RA)

Larga Vida y Prosperidad
Que la Fuerza los acompañe hasta los 2 Gb y más allá

Fidel Charny

unread,
Mar 9, 2016, 6:36:52 PM3/9/16
to Comunidad de Visual Foxpro en Español
Si sabemos que el archivo de texto de gran tamaño, tiene como separador de lineas CHR(13) + CHR(10) se puede utilizar algo como lo que sigue:

* Unicamente si las líneas se separan con CHR(13) + CHR(10)
TRY
    LOCAL lcFile
,;
        loFso
as Object,;
        loText
as Object,;
        lcLine
,;
        loex
as Exception

    lcFile
= "c:\Theodore\xaloja.txt"
    loFso
= NEWOBJECT("Scripting.FileSystemObject")
    loText
= loFso.OpenTextFile(m.lcfile,1)
    DO WHILE
.t.
        IF loText
.AtEndOfStream
            EXIT
        ENDIF
        lcLine
= loText.ReadLine()
       
* Acá va el tratamiento de texto

    ENDDO
CATCH TO loex
    loex
.UserValue = PROGRAM()
   
* MostrarError(loex)
FINALLY
    IF VARTYPE
(loText)="O"
        loText
.Close()
    ENDIF
    loText
= null
    loFso
= null
ENDTRY

Si el archivo tiene igual cantidad de caracteres por línea, también se puede utilizar
lnChar = 464 && ejemplo
lcLine = loText.Read(lnChar)

Si el archivo de texto tiene como separador de líneas solamente CHR(13), me tengo que poner a estudiar (je, je...)
Lo mejor es que no sea tan grande
lnLines = alines(laLines, filetostr(lcTextFile),1+4 , chr(10),chr(13) )

mapner

unread,
Mar 9, 2016, 7:15:53 PM3/9/16
to Comunidad de Visual Foxpro en Español
Si es texto simple podrías probar el comprimirlo con zlib.dll o algún utilitario similar y almacenar la versión comprimida.

Saludos

JesusQuin

unread,
Mar 10, 2016, 12:11:24 AM3/10/16
to Comunidad de Visual Foxpro en Español
Buscando encontré esta librería vfp2c32.fll creo que esta preparada para funcionar con VFP9 pero algunas cosas me funcionan en VFP5, entre ellas las funciones para archivos en bajo nivel sin el límite de los 2GB, los nombres de las funciones son las mismas que las de VFP agregándole el sufijo EX, Ej. FOPENEX(), no tiene la equivalente FERROR() y no me funciona AERROREX() creo que es por la versión de VFP.

Saludos Jesús.
Message has been deleted

JesusQuin

unread,
Mar 10, 2016, 7:40:45 AM3/10/16
to Comunidad de Visual Foxpro en Español
Hola todos, gracias por su colaboración, disculpa Fer, aún no he terminado, si probé lo que indicaste después de buscar documentación al respecto porque Fidel aún no había hecho su aporte, y sí, pude leer el archivo hasta el final, ahora me queda el problema de detectar errores durante la lectura/escritura, recuerden que en VFP5 no existe TRY... y en ninguna de las opciones existe el equivalente de FERROR(), espero me puedan colaborar.

Un abrazo, Jesús

El jueves, 10 de marzo de 2016, 1:36:04 (UTC-5), Fernando D. Bozzo escribió:

Jesus, al menos podías probar lo que te puse, que tampoco tiene ese límite.
Cuando se pregunta, como mínimo hay que leer las respuestas de ayuda...

Fidel Charny

unread,
Mar 10, 2016, 9:06:43 AM3/10/16
to Comunidad de Visual Foxpro en Español
Jesús:
Efectivamente no tienes TRY/CATCH / ENDTRY. Pero puedes reemplazar eso con ON ERROR DO prgErrores / ON ERROR. Ya me olvidé del espantoso ON ERROR.
Tener ahí alguna forma de detectar errores es imprescindible, porque de producirse errores, puede que sean millones y tendrás que abortar el programa a garrotazos.
También hay que tener en cuenta que la lectura tomará su tiempo, por lo que hay que agregar algún aviso que tranquilice al usuario.
"FERROR() Returns a number corresponding to the most recent low-level file function error" por lo que no aplica para el caso porque no se utilizan las funciones de bajo nivel FOPEN(), FREAD() FGETS() etc.

Jean Pierre Adonis De La Cruz Garcia

unread,
Mar 10, 2016, 10:32:33 AM3/10/16
to Comunidad de Visual Foxpro en Español
Aca te dejo una posible solucion, con esto solucionaras el problema del tamño del texto


El miércoles, 9 de marzo de 2016, 9:22:32 (UTC-5), JesusQuin escribió:

JesusQuin

unread,
Mar 10, 2016, 11:12:09 AM3/10/16
to Comunidad de Visual Foxpro en Español
Jean Pierre, creo que te equivocaste de tema.

¿A quien le aplicamos el bruto?

Jesús

Jean Pierre Adonis De La Cruz Garcia

unread,
Mar 10, 2016, 12:34:36 PM3/10/16
to Comunidad de Visual Foxpro en Español
jejeje, es que se me chispoteo, jejeje
Es bueno animar los jueves cortos, que es prox. al viernes.

JesusQuin

unread,
Mar 10, 2016, 5:39:05 PM3/10/16
to Comunidad de Visual Foxpro en Español
Listo gracias  por todo su aporte, me quedo con la librería vfp2c32.fll que además tiene otrs cosas muy interesantes.

Un abrazo, Jesús


El miércoles, 9 de marzo de 2016, 9:22:32 (UTC-5), JesusQuin escribió:

Fernando D. Bozzo

unread,
Mar 11, 2016, 2:51:25 AM3/11/16
to Comunidad de Visual Foxpro en Español
Yo dejaría marcada como respuesta la de Fidel, para que otros puedan encontrar útil el hilo.
Vos preguntabas por leer un archivo grande y yo interpreté lo contrario, escribir un archivo grande.

Saludos.-

JesusQuin

unread,
Mar 11, 2016, 7:06:35 AM3/11/16
to Comunidad de Visual Foxpro en Español
Últimamente estamos corriendo mucho Fer, ¿será porque nos estamos haciendo más viejos?

Fernando D. Bozzo

unread,
Mar 11, 2016, 7:10:29 AM3/11/16
to Comunidad de Visual Foxpro en Español
Ja ja ja ja ja! Sí, es muy probable :D
Reply all
Reply to author
Forward
0 new messages