Importar .txt a dbf

09/05/2005 - 16:42 por katy hernandez | Informe spam
Hola a todos,
Estoy haciendo un programa que me permita importar a una tabla desde un
archivo txt, esto es relativamente facil si el archivo txt viene delimitado
con tab, blank, etc.. pero si viene delimitado por el ancho fijo, es decir,
el tamaño del campo, la cosa se complica, lo que hago es:

(cree un cursor de un campo de tipo M, )

append blank
APPEND MEMO field1 FROM (nombrea)

determinino el tamaño de campo M para saber cuantas lineas se van a
importar.
y voy extrayendo dentro de un for la informacion para luego parasarla a una
tabla.
Es un procedimiento un poco tedioso!! existe alguna rutina o funcion que
facilite este proceso de importacion?

Desde ya muchas gracias por la atencion prestada.

Preguntas similare

Leer las respuestas

#1 Angel J. Hernández M.
09/05/2005 - 22:29 | Informe spam
Puedes hacerlo mediante un DTS desde SQL Server (así te beneficias del
proveedor OLEDB de VFP).

Saludos,


Angel J. Hernández M.
MCP - MCAD - MCSD - MCDBA
http://groups.msn.com/desarrolladoresmiranda



"katy hernandez" wrote in message
news:
Hola a todos,
Estoy haciendo un programa que me permita importar a una tabla desde un
archivo txt, esto es relativamente facil si el archivo txt viene
delimitado
con tab, blank, etc.. pero si viene delimitado por el ancho fijo, es
decir,
el tamaño del campo, la cosa se complica, lo que hago es:

(cree un cursor de un campo de tipo M, )

append blank
APPEND MEMO field1 FROM (nombrea)

determinino el tamaño de campo M para saber cuantas lineas se van a
importar.
y voy extrayendo dentro de un for la informacion para luego parasarla a
una
tabla.
Es un procedimiento un poco tedioso!! existe alguna rutina o funcion que
facilite este proceso de importacion?

Desde ya muchas gracias por la atencion prestada.


Respuesta Responder a este mensaje
#2 katy hernandez
09/05/2005 - 22:38 | Informe spam
Gracias Angel por responder, no sera mucha molestia conoceras algun link que
me pueda ayudar, baje uno del portal pero me da un error es usando el
SQLSTRINGCONNECT() y el SQLEXEC(). te anexo el codigo

También se puede utilizar el driver ODBC para importar archivos de texto TXT
y CSV.


*Su utilización sería algo así como:

*1 - Para este ejemplo se utilizó la tabla Categories de la base de datos
Northwind,
*creando un archivo de texto delimitado por tabuladores mediante:
************COPY TO categories.txt DELIMITED WITH tab

*2 - Crea un archivo SCHEMA.INI en la carpeta que especifique la estructura
del archivo
*TXT que vas a importar. Se puede hacer desde el Administrador de orígenes
de datos
*ODBC, que puedes ejecutar desde VFP con:
RUN /N "C:WINDOWSsystem32odbcad32.exe"

cArchivo=GETFILE("TXT")
*El archivo SCHEMA.INI almacena las propiedades de conexión y estructura de
los archivos
*de texto que se vayan a abrir mediante el driver ODBC de archivos de texto.
Su funciona_
*miento es análogo a los archivos .INI , con lo que se puede utilizar el API
( funciones
*WritePrivateProfileString y GetPrivateProfileString ) para escribir en el
archivo y recu_
*perar sus valores. El contenido final para el archivo categories.txt sería
algo asi como:
[categories.txt]
ColNameHeader=False
Format=TabDelimited
MaxScanRows
CharacterSet=OEM
Col1ñ Integer
Col2ò Char Width 255
Col3ó Char Width 255

*3 - Puedes utilizar la siguiente cadena de conexión para abrir el archivo
de texto mediante
*el driver ODBC:
cconexion = "DefaultDir="+JUSTPATH(cArchivo)+";Driver={Microsoft Text Driver
(*.txt; *.csv)}" +
";DriverId';FIL=text;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;" +
"SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"

*Es muy importante que en DefaultDir se especifique la carpeta donde esta el
archivo TXT actualmente.

*4 - Abrir una conexión utilizando esta cadena de conexion:
nHandle = SQLSTRINGCONNECT(cConexion)

*5 - Por último generar un cursor local que recupera el contenido del
archivo de texto:
nFilas = SQLEXEC(nHandle,cSelect,"Cursor_Texto")


*El código completo del programa de ejemplo es el siguiente:

*-
* Abre la tabla y genera el archivo de texto
*-
USE HOME()+"samplesnorthwindcategories"
COPY TO d:borramecategories.txt DELIMITED WITH TAB
*--
* Archivo de texto
*--
cArchivo = "D:BORRAMECATEGORIES.TXT"
*-
* Cadena de conexión
*-
cconexion = "DefaultDir="+JUSTPATH(cArchivo)+";Driver={Microsoft Text Driver
(*.txt; *.csv)}" + ;
";DriverId';FIL=text;MaxBufferSize 48;MaxScanRows=8;PageTimeout=5;" +
;
"SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
*-
* Handle de conexión
*-
nHandle = SQLSTRINGCONNECT(cConexion)
*
* Consulta
*
cSelect = "SELECT * FROM "+cArchivo
*--
* Ejecuta la consulta
*--
nFilas = SQLEXEC(nHandle,cSelect,"Cursor_Texto")
*-
* Contenido del archivo SCHEMA.INI:
*-
* [categories.txt]
* ColNameHeader=False
* Format=TabDelimited
* MaxScanRows
* CharacterSet=OEM
* Col1ñ Integer
* Col2ò Char Width 255
* Col3ó Char Width 255

"Angel J. Hernández M." escribió en el mensaje
news:
Puedes hacerlo mediante un DTS desde SQL Server (así te beneficias del
proveedor OLEDB de VFP).

Saludos,


Angel J. Hernández M.
MCP - MCAD - MCSD - MCDBA
http://groups.msn.com/desarrolladoresmiranda



"katy hernandez" wrote in message
news:
> Hola a todos,
> Estoy haciendo un programa que me permita importar a una tabla desde un
> archivo txt, esto es relativamente facil si el archivo txt viene
> delimitado
> con tab, blank, etc.. pero si viene delimitado por el ancho fijo, es
> decir,
> el tamaño del campo, la cosa se complica, lo que hago es:
>
> (cree un cursor de un campo de tipo M, )
>
> append blank
> APPEND MEMO field1 FROM (nombrea)
>
> determinino el tamaño de campo M para saber cuantas lineas se van a
> importar.
> y voy extrayendo dentro de un for la informacion para luego parasarla a
> una
> tabla.
> Es un procedimiento un poco tedioso!! existe alguna rutina o funcion que
> facilite este proceso de importacion?
>
> Desde ya muchas gracias por la atencion prestada.
>
>


Respuesta Responder a este mensaje
#3 Germán Giraldo
09/05/2005 - 23:58 | Informe spam
Hola Katy, Intenta con

APPREND FROM archivo.txt ;
FIELDS campo1, campo2, , campoN ;
TYPE SDF

Saludos

Germán Giraldo

"katy hernandez" escribió en el mensaje
news:
Hola a todos,
Estoy haciendo un programa que me permita importar a una tabla desde un
archivo txt, esto es relativamente facil si el archivo txt viene


delimitado
con tab, blank, etc.. pero si viene delimitado por el ancho fijo, es


decir,
el tamaño del campo, la cosa se complica, lo que hago es:

(cree un cursor de un campo de tipo M, )

append blank
APPEND MEMO field1 FROM (nombrea)

determinino el tamaño de campo M para saber cuantas lineas se van a
importar.
y voy extrayendo dentro de un for la informacion para luego parasarla a


una
tabla.
Es un procedimiento un poco tedioso!! existe alguna rutina o funcion que
facilite este proceso de importacion?

Desde ya muchas gracias por la atencion prestada.


Respuesta Responder a este mensaje
#4 katy hernandez
10/05/2005 - 15:19 | Informe spam
German me funciona a la perfeccion!!! no tengo que hacer ningun rutina
adicional solo tienen que coincidir el tamaño del campo.

Un Millon de Gracias por tu ayuda!!!!!!

"Germán Giraldo" escribió en el mensaje
news:
Hola Katy, Intenta con

APPREND FROM archivo.txt ;
FIELDS campo1, campo2, , campoN ;
TYPE SDF

Saludos

Germán Giraldo

"katy hernandez" escribió en el mensaje
news:
> Hola a todos,
> Estoy haciendo un programa que me permita importar a una tabla desde un
> archivo txt, esto es relativamente facil si el archivo txt viene
delimitado
> con tab, blank, etc.. pero si viene delimitado por el ancho fijo, es
decir,
> el tamaño del campo, la cosa se complica, lo que hago es:
>
> (cree un cursor de un campo de tipo M, )
>
> append blank
> APPEND MEMO field1 FROM (nombrea)
>
> determinino el tamaño de campo M para saber cuantas lineas se van a
> importar.
> y voy extrayendo dentro de un for la informacion para luego parasarla a
una
> tabla.
> Es un procedimiento un poco tedioso!! existe alguna rutina o funcion que
> facilite este proceso de importacion?
>
> Desde ya muchas gracias por la atencion prestada.
>
>


Respuesta Responder a este mensaje
#5 Germán Giraldo
10/05/2005 - 18:01 | Informe spam
Me alegra que te haya funcionado. Lo de la longitud de los campos si es
*muy* importante con archivos SDF, si no coincide la longitud de alguno de
los campos, ese campo y los siguientes no tendrán los datos correctos.

Saludos

Germán Giraldo


"katy hernandez" escribió en el mensaje
news:ubG#
German me funciona a la perfeccion!!! no tengo que hacer ningun rutina
adicional solo tienen que coincidir el tamaño del campo.

Un Millon de Gracias por tu ayuda!!!!!!

"Germán Giraldo" escribió en el mensaje
news:
> Hola Katy, Intenta con
>
> APPREND FROM archivo.txt ;
> FIELDS campo1, campo2, , campoN ;
> TYPE SDF
>
> Saludos
>
> Germán Giraldo
>
> "katy hernandez" escribió en el mensaje
> news:
> > Hola a todos,
> > Estoy haciendo un programa que me permita importar a una tabla desde


un
> > archivo txt, esto es relativamente facil si el archivo txt viene
> delimitado
> > con tab, blank, etc.. pero si viene delimitado por el ancho fijo, es
> decir,
> > el tamaño del campo, la cosa se complica, lo que hago es:
> >
> > (cree un cursor de un campo de tipo M, )
> >
> > append blank
> > APPEND MEMO field1 FROM (nombrea)
> >
> > determinino el tamaño de campo M para saber cuantas lineas se van a
> > importar.
> > y voy extrayendo dentro de un for la informacion para luego parasarla


a
> una
> > tabla.
> > Es un procedimiento un poco tedioso!! existe alguna rutina o funcion


que
> > facilite este proceso de importacion?
> >
> > Desde ya muchas gracias por la atencion prestada.
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida