Hola a todos
Necesito levantar información de una aplicación que solo comparte sus datos mediante archivos planos de este formato:
"1235;0;Jose;4250;0;12/05/2006;10"
"124;45;Antonio;301;12;21/04/2005;8"
y necesito descomponerlo en strings para guardarlos en 7 campos de texto de 40 caracteres de una base de datos.
cada linea esta separada por un enter y seria un registro, cada texto
entre ";" es un campo.
He tratado de levantarlo con append blank delimited sin el resultado esperado, espero cualquier ayuda.
Gracias desde ya
Levantar archivo de Texto Delimitado
- jose_murugosa
- Posts: 943
- Joined: Mon Feb 06, 2006 4:28 pm
- Location: Uruguay
- Contact:
Levantar archivo de Texto Delimitado
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
José Murugosa
FWH + Harbour + Bcc7. Una seda!
- Raymundo Islas M.
- Posts: 590
- Joined: Tue Mar 14, 2006 11:34 pm
- Location: Acapulco, Gro. MEXICO
Hola Jose
Tengo algo parecido, creo que con algunos ajustes te puede servir :
oTxtFil := TTxtFile():New( TuArchivo.TXT )
oMetRec:SetPos(0)
oMetRec:SetRange( 0, oTxtFil:RecCount() )
TuBase->( DbZap() )
FOR nQ := 1 TO oTxtFil:RecCount()
cStrLine := oTxtFil:ReadLine()
// Ya que tienes el contenido de una linea, hay que volcarlo en variables
// o en un arreglo
// en un post de hace poco, lei que con StrToken lo puedes hacer
// yo no lo he usado, pero yo lo he hecho con un FOR...NEXT
aDts := {}
cStrX := ""
For nW := 1 TO Len( cStrLine )
IF SubStr( cStrLine, nQ, 1 ) == ";"
AaDd( aDts, cStrX )
cStrX := ""
ELSE
cStrX += SubStr( cStrLine, nQ, 1 )
ENDIF
NEXT
// Y Vaciamos el arreglo en la base
TuBas->( DbAppend() )
TuBase->XCampo := aDts[1]
..
..
oMetRec:SetPos( nQ )
oTxtFil:Skip()
NEXT
oTxtFil:Close()
TuBase->( DbCommit() )
Espero te sirva
Saludos
Tengo algo parecido, creo que con algunos ajustes te puede servir :
oTxtFil := TTxtFile():New( TuArchivo.TXT )
oMetRec:SetPos(0)
oMetRec:SetRange( 0, oTxtFil:RecCount() )
TuBase->( DbZap() )
FOR nQ := 1 TO oTxtFil:RecCount()
cStrLine := oTxtFil:ReadLine()
// Ya que tienes el contenido de una linea, hay que volcarlo en variables
// o en un arreglo
// en un post de hace poco, lei que con StrToken lo puedes hacer
// yo no lo he usado, pero yo lo he hecho con un FOR...NEXT
aDts := {}
cStrX := ""
For nW := 1 TO Len( cStrLine )
IF SubStr( cStrLine, nQ, 1 ) == ";"
AaDd( aDts, cStrX )
cStrX := ""
ELSE
cStrX += SubStr( cStrLine, nQ, 1 )
ENDIF
NEXT
// Y Vaciamos el arreglo en la base
TuBas->( DbAppend() )
TuBase->XCampo := aDts[1]
..
..
oMetRec:SetPos( nQ )
oTxtFil:Skip()
NEXT
oTxtFil:Close()
TuBase->( DbCommit() )
Espero te sirva
Saludos
FWH 10.6 + xHarbour + Borland 582
- jose_murugosa
- Posts: 943
- Joined: Mon Feb 06, 2006 4:28 pm
- Location: Uruguay
- Contact:
- Raymundo Islas M.
- Posts: 590
- Joined: Tue Mar 14, 2006 11:34 pm
- Location: Acapulco, Gro. MEXICO
- jose_murugosa
- Posts: 943
- Joined: Mon Feb 06, 2006 4:28 pm
- Location: Uruguay
- Contact:
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
Re: Levantar archivo de Texto Delimitado
Jose Antonio,jose_murugosa wrote: He tratado de levantarlo con append blank delimited sin el resultado esperado
No es Append Blank, sino APPEND FROM ....
A mi me funciona perfecto.
En tu ejemplo quizas no funcione, porque el campo fecha tiene que tener el formato aaammdd.
En ese caso, yo tengo una base de datos provisional, con un solo campo, con un ancho de 256 caracteres.
Use provisional
APPE FROM (cFichero) SDF
Con esto, ya tengo todos los registros en Provisional.- Luego desde este base, con un WHILE/ENDD los voy añadiendo a la base que quiero, con SUBS y AT
Un saludo
Manuel
Manuel
- jose_murugosa
- Posts: 943
- Joined: Mon Feb 06, 2006 4:28 pm
- Location: Uruguay
- Contact:
Gracias Manuel,
Es cierto, es Append from, me equivoqué al registrarlo en el post, pero excelente la idea de como descomponer utilizando una base de datos intermedia.
Gracias por siempre estar contestando los mensajes del foro, en estos días voy a tener que hacer esta importación y estaré probando ambas ideas para ver con cual me quedo.
Es cierto, es Append from, me equivoqué al registrarlo en el post, pero excelente la idea de como descomponer utilizando una base de datos intermedia.
Gracias por siempre estar contestando los mensajes del foro, en estos días voy a tener que hacer esta importación y estaré probando ambas ideas para ver con cual me quedo.
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
José Murugosa
FWH + Harbour + Bcc7. Una seda!
-
- Posts: 122
- Joined: Wed Oct 12, 2005 1:03 pm
- Location: Cuernacava, Morelos Mexico
RECUERDO QUE EN DBASE
SE UTILIZABA:
APPEND FROM ARCHIVO.TXT DELIMITED
Y ESO ERA SUFICIENTE PARA ARCHIVOS DELIMITADOS
APPEN FROM ARCHIVO.TXT SDF PARA ARCHIVOS TABULARES
OJALA SIRVA
SALUDOS
SE UTILIZABA:
APPEND FROM ARCHIVO.TXT DELIMITED
Y ESO ERA SUFICIENTE PARA ARCHIVOS DELIMITADOS
APPEN FROM ARCHIVO.TXT SDF PARA ARCHIVOS TABULARES
OJALA SIRVA
SALUDOS
Marco Augusto Rodriguez Manzo
fwh 2020 Xharbour 1.2.3
MySQL 5.0.19 Fastreport
PERZO SOFT
Sistemas Personalizados
fwh 2020 Xharbour 1.2.3
MySQL 5.0.19 Fastreport
PERZO SOFT
Sistemas Personalizados
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
Marco Augusto,Marco Augusto wrote:APPEND FROM ARCHIVO.TXT DELIMITED
APPEND FROM ... DELIMITED WITH ... funciona cuando el delimitador es "," pero no (por lo menos a mi) cuando el delimitador es ";" como es el caso que expone José.
Por otra parte, al mostrar las fecha como dd/mm/aaaa, creo que tampoco funcionaría, ya que hay que tenerlas en formato aaaammdd.
Un saludo
Manuel
Manuel