Leer numero de columnas antes de realizar una carga a una tabla VFP

Alguno de ustedes sabrá como poder contar el numero de columna de un archivo TXT antes de cargarlo a una tabla dbf.

En caso de que contenga menos o más columnas de la que pueda introducir a mi tabla, me mande una alerta en la cual me indique si son más o si son menos columnas.

1 respuesta

Respuesta
1

Pon unas líneas del contenido del TXT que mencionas Eliseo y cuantas columnas son las optimas; así podrías ayudarte mejor.

claro que si 

este seria mi txt a validar

JESUS;IBARRA;masculino;informatica;15;[email protected]
EDUARDO EPITACIO;ALCOCER;masculino;informatica;15;[email protected]
ARMANDO;ROJANO;masculino;informatica;16;[email protected]
DELIA MARIA;CAMPOS;femenino;informatica;16;[email protected]
MARIA CRISTINA;CASTA?EDA;femenino;informatica;17;[email protected]
SILVIA;GONZALEZ;femenino;informatica;17;[email protected]
PATRICIA;MARTINEZ;femenino;informatica;17;[email protected]
JOSE ELIAS RAMON;CERVANTES;masculino;informatica;18;[email protected]
GLENDA ELIZABETH;FLORES;femenino;informatica;18;[email protected]
TOMAS;IRIGOYEN;masculino;contabilidad;19;[email protected]

como puedes ves esta delimitado por ";" y serian un total de 6 columnas,

lo que quisiera saber si es que hay alguna manera en VFP de validar antes de utilizar el comando.

APPEND FROM "archivo.txt" DELIMITED WITH CHARACTER ';'

y que me pueda dar un mensaje indicando si son menos o si son mas dependiendo del numero de columnas que contenga.

Repasa éste código y dime que no entiendes...

CLEAR
LOCAL cArctxt
cArctxt = GETFILE("TXT")
IF EMPTY(cArctxt)
    RETURN
endif
cArchivo = Filetostr(cArctxt)
nLineas  = Alines(aLineas,cArchivo)
MESSAGEBOX("El archivo contiene"+TRANSFORM(nLineas)+" líneas.",64,"Cantidad de Líneas")
For nX=1 To nLineas
    cLinea = aLineas(nX)
    ? "Línea "+TRANSFORM(nX)+": "+cLinea+;
    " Tiene "++TRANSFORM(GETWORDCOUNT(cLinea,";"))+" campos."
NEXT

CLEAR 
LOCAL cArctxt, cArchivo, nLineas, nX, nCampos, nY
cArctxt = GETFILE("TXT")
IF EMPTY(cArctxt)
    RETURN 
endif
cArchivo = Filetostr(cArctxt)
nLineas  = Alines(aLineas,cArchivo)
MESSAGEBOX("El archivo contiene"+TRANSFORM(nLineas)+" líneas.",64,"Cantidad de Líneas")
For nX=1 To nLineas
    cLinea  = aLineas(nX)
    nCampos = GETWORDCOUNT(cLinea,";")
    ? "Línea "+TRANSFORM(nX)+": "+cLinea+ ;
        " Tiene "++TRANSFORM(nCampos)+" campos."
    For nY=1 to nCampos
        cDato = GETWORDNUM(cLinea,nY,";")
        ? cDato
    NEXT
NEXT 

Me faltaron algunas cosas en el primer ejemplo, aquí está más desarrollado. Crea un PRG copias el contenido y lo pruebas; pienso que te dará mejor idea.

muchas gracias amigo.

solo que me manda un error en la variable cArchivo=filetostr(cArctxt)

este es el error

Al parecer es por el tamaño del archivo que estoy intentando leer, ya que contiene más de 3 millones de registros, crees que exista alguna manera de poder leer este tamaño de archivos.

Saludos, gracias

Como podría hacerle para que solo me tome la primer línea, ya que lo único que realmente necesito es que me de de resultado el numero de columnas que contiene, por lo que pienso que solo con que me lea la primer línea me daría el resultado que necesito.

Así de esta manera no tendría el problema de memoria.

En un archivo tan grande y teniendo en cuenta que solo deseas ver el primer registro, prueba lo siguiente:

CLEAR 
LOCAL cArctxt, cArchivo, nLineas, nX, nCampos, nY
cArctxt = GETFILE("TXT")
IF EMPTY(cArctxt)
    RETURN 
endif
nHnd = FOPEN(cArctxt)
nEnd = FSEEK(nHnd,0,2)
nTop = FSEEK(nHnd,0)
cLinea = FGETS(nHnd,nEnd)
nCampos = GETWORDCOUNT(cLinea,";")
? cLinea+" Tiene "+TRANSFORM(nCampos)+" campos."
For nY=1 to nCampos
    cDato = GETWORDNUM(cLinea,nY,";")
    ? cDato
NEXT
FCLOSE(nHnd)

que tal amigo muchas gracias

te comento aun me da un resultado de error al intentar leer un txt de gran tamaño, ya que al cargar uno con pocos registros si realiza el procedimiento.

saldos  

El problema desde luego es el tamaño del archivo; y si no te da error el comando APPEND FROM podrías usarlo primeramente en un archivo cursor; veamos, sería algo así...

CLEAR 
LOCAL cArctxt
cArctxt = GETFILE("TXT")
IF EMPTY(cArctxt)
    RETURN 
endif
Select Select(1)
Create Cursor csrDatos (Linea c(250))
Append From (cArctxt) type SDF
GO TOP
If !EOF()
    cLinea = Alltrim(Linea)
    nCampos = GETWORDCOUNT(cLinea,";")
    ? cLinea+" Tiene "+TRANSFORM(nCampos)+" campos."
    For nY=1 to nCampos
        cDato = GETWORDNUM(cLinea,nY,";")
        ? cDato
    NEXT
Endif
USE IN csrDatos

Basicamente lo que hace es cargar el archivo de texto dentro de una tabla cursor; para evitar cargarlo primeramente en la tabla y que te diese errores. Sucede que APPEND FROM no tiene más opciones para controlar las acciones que realiza, solo define que importar y en que formato.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas