como importar un txt a una tabla libre (dbf) ?

119 views
Skip to first unread message

Antonio Lopez

unread,
Jan 27, 2017, 10:29:44 AM1/27/17
to Comunidad de Visual Foxpro en Español
Hola amigos, tengo una duda como importo un texto plano a una tabla libre ? gracias de antemno por las ideas aportadas, adjunto el archivo de texto plano
report.asc.txt

Foxshin

unread,
Jan 27, 2017, 1:12:00 PM1/27/17
to Comunidad de Visual Foxpro en Español
Hello :D

La respuesta simple a tu pregunta es: crea la tabla libre (con el comando CREATE TABLE y luego usas el comando APPEND FROM
Ahora bien, el formato del archivo que has compartido no es muy normal que digamos (por lo menos para mi), asi que tendrías que darle cierto formato para usar el comando de forma adecuada.
Algo asi como:

LOCAL lcTablaLibre AS String;
   
,lcFileOrigen AS String;
   
,lcFileStr AS String;
   
,lcFileDestino AS String
m
.lcTablaLibre = 'TablaRep'         && Nombre de la tabla libre que deseas crear
m
.lcFileOrigen = "report.asc.txt"   && Nombre del archivo de texto conteniendo la información
**
** Los Nombres y tipo de datos de las columnas son solamente de ejemplo.
CREATE TABLE
(m.lcTablaLibre) FREE (Division V(5),Estilo V(10),UPC V(15);
                           
,StyleName V(70),ColorCode V(10),ColorName V(30);
                           
,ColorNRF V(5),Tamanho V(5),Grupo V(10))
USE IN
(JUSTSTEM(m.lcTablaLibre))
USE
(m.lcTablaLibre) IN 0 ALIAS 'TablaLibre' EXCLUSIVE
IF USED
('TablaLibre')
    SELECT
'TablaLibre'
    m
.lcFileStr = FILETOSTR(m.lcFileOrigen)
    m
.lcFileDestino = ADDBS(GETENV("TEMP")) + FORCEEXT(SYS(2015),'TXT')
    IF STRTOFILE
(STRTRAN(m.lcFileStr,'| ',CHR(13)+CHR(10)),m.lcFileDestino)<1
        MESSAGEBOX
('No se ha podido dar el formato adecuado al archivo origen',0+16,'Error')
    ELSE
        APPEND FROM
(m.lcFileDestino) TYPE DELIMITED WITH CHARACTER "|"
       
        ** Esta parte es para eliminar el primer registro donde estaban los nombres de las columnas **
        GO TOP IN 'TablaLibre'
        DELETE IN
'TablaLibre'
        PACK IN
'TablaLibre'
        **
       
        MESSAGEBOX('Se han añadido nuevos registros al archivo:' ;
           
+ CHR(13) +DBF('TablaLibre'),0+64,'Operación completada!')
        BROWSE NOEDIT
    ENDIF
    USE IN
'TablaLibre'
ENDIF
RELEASE m
.lcFileStr,m.lcFileOrigen,m.lcFileDestino

Obviamente se pueden hacer mejoras al código que aqui muestro, pero por lo menos espero te sirva como ejemplo.

Saludos.

Bytes ^_^

Message has been deleted

Antonio Lopez

unread,
Jan 27, 2017, 2:05:52 PM1/27/17
to Comunidad de Visual Foxpro en Español
Gracias Foxshin, voy a revisar el codigo y vere como sale 

integral

unread,
Jan 27, 2017, 3:29:32 PM1/27/17
to Comunidad de Visual Foxpro en Español


Estimado Amigo : 

Efectivamente el archivo de texto posee mas de una columna con datos especiales y se debe crear una rutina para obtener los datos reales...

recuerdo que este mismo tema se toco hace un poco mas de un mes y medio y se dio la solución al tema...

Saludos,

INTEGRAL

Víctor Hugo Espínola Domínguez

unread,
Jan 27, 2017, 4:15:39 PM1/27/17
to publice...@googlegroups.com
Esos no son datos especiales, son números escritos en notación científica, prueba el programa enviado por Foxshin.

Saludos,
Víctor.
Lambaré - Paraguay.

Reply all
Reply to author
Forward
0 new messages