FoxPro/Visual FoxPro - Problema para pasar un archivo de Txt a cursor

 
Vista:

Problema para pasar un archivo de Txt a cursor

Publicado por es_binario (757 intervenciones) el 02/03/2011 16:36:39
Tengo un problema con un archivo de texto, el caso es que generalmente hago un append blank despues de leer y crear un cursor y todo bien. exepto en un caso en el que el archivo me lo envian delimitado con el caracter "|", ademas de que me lo envian delimitado al final no tiene un enter solo un cuadro pequeño.

Archivo tipo A en el que no tengo ningun problema
A001017371AA 1044IBERET 500 MG TAB 30 ABBOTT 00002041000001632801902117501033920608
A001017531AA 1044DEPAKENE 250 MG CAPS 30 568111 ABBOTT 00003301000002640891902117501033920325
A001017961AA 1044DEPAKENE 250 MG CAPS 60 568112 ABBOTT 00006156000004924891902117501033920332
A001023501AA 1044EPIVAL 250 MG CPR 30 ABBOTT 00003361000002688801902117501033921759

lo leo asi:
*// nadro hoy
CREATE CURSOR nadrohoy(tipo_de_movimiento c(1), codigo_nadro c(8), familia n(1),;
departamento c(1), categoria c(1), filler c(1),;
vencimiento n(1), refrigera c(1), cvessa n(1),;
fiscal c(1), descrip c(35), laboratorio c(10),;
p_publico_s_iva c(9), p_farma c(9), pece c(1),;
ult_mov c(6), ean c(13), p_publico_bien n(8,2),;
p_farma_bien n(8,2), ean_bien c(18))
archivo = GETFILE ("dat","Seleccione el Archivo con la actualizacion de Precios","Abrir",0,"Examinar")
APPEND FROM &archivo sdf

-------- AQUI EL ARCHIVO QUE NO PUEDO LEER POR SU FORMATO QUE NO RECONOZCO -----
clfilial|cliva|clproducto|dsproducto|estado|fecambio|nbproveedor|prdesclim|prefar|prepub|priva|prmargen|ventaneta|
16|A|729094|ACROMICINA T 20 250MG ANT|NO|2011-02-04 16:57:33|PFIZER S A DE C V|0.18000000715255737|90.11000061035156|112.62999725341797|0.0|0.19996270537376404|0|
16|A|026794|ADEL SUSP 60ML 125MG/5ML ANT|NO|2010-12-20 16:49:21|SENOSIAIN SA DE CV LABS|0.0|264.8699951171875|325.0|0.0|0.18501538038253784|0|
16|A|026808|ADEL SUSP 60ML 250MG/5ML ANT|NO|2010-11-04 16:44:52|SENOSIAIN SA DE CV LABS|0.0|362.6700134277344|445.0|0.0|0.1850000023841858|0|
16|A|826723|ADEL T 10 250MG ANT|FA|2011-02-17 20:16:38|SENOSIAIN SA DE CV LABS|0.0|281.1700134277344|345.0|0.0|0.1850000023841858|0|
16|A|826731|ADEL T 10 500MG ANT|NO|2011-01-17 16:57:31|SENOSIAIN SA DE CV LABS|0.0|456.3999938964844|560.0|0.0|0.1850000023841858|0|
16|C|863823|AMBREXIN C 12 500MG/8MG ANT|NO|2011-01-19 16:32:19|IVAX PHARMACEUTICALS SA CV GI|0.0|27.110000610351562|89.5|0.0|0.6970949769020081|1|

bueno algo intereseante es que aqui al pegarlo en el post si me da los enters pero con el notepad me aparece un cuadro pequeño como un caracter un cuadro.

gracias por sus sujerencias y ayuda.
por cierto la estructura es diferente al cursor de arriba pero aun asi tengo problemas para cargarlo con la estructura correcta, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema para pasar un archivo de Txt a cursor

Publicado por Kapo (1 intervención) el 02/03/2011 17:01:49
Kapo: no sería mejor SOLICITAR que te envíen los archivos txt con el formato que tu necesitas, digo no sé.
Besos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema para pasar un archivo de Txt a cursor

Publicado por xx (378 intervenciones) el 02/03/2011 18:27:43
Hay dos maneras: una rapida y otra elegante:

rapida: renombrar el archivo como TXT, abrir el excel (probe con 2007 deberia funcionar con todas) vas a menu abrir, y seteas la extension para que te permita abrir TXT e inmediatamente te sale el wizard, debes elegir delimited ((y no fixed)), luego eliges el delimitador que en este caso es | ((barra vertical o simbolo or binario en C)) y abajo ya te muestra unos cuantos next o siguientes y ya tienes en excel, desde alli puedes pasar a DBF o cualquier otro formato que te interese

elegante: con funciones de bajo nivel como fopen(), fread() fclose() ni te explico porque se que elegiras el metodo rapido, jejeje

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Problema para pasar un archivo de Txt a cursor

Publicado por Juan Manuel Cruz (512 intervenciones) el 02/03/2011 19:52:59
Si los campos están delimitados por un caracter especial, es obvio que, pese al nombre que quieran poner, NO es un archivo SDF que suelen ser de campos de longitud fija.

Mira la ayuda y prueba con la sintaxios extendida del comando APPEND, prueba con las multiples posibilidades de la claúsula DELIMITED WITH

... o como bien dijo alguien, que te den los archivos en el formato tal como tú necesitas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema para pasar un archivo de Txt a cursor

Publicado por xx (378 intervenciones) el 04/03/2011 01:58:15
Bueno lei detenidamente y me percate de que el archivo que ten envian parece no tener el ENTER al final de cada linea lo cual desde el excel no te lo leera, quizas se trate de un archivo de texto linux o unix que es muy probable si es que tienen mysql en o algun otro sql en linux, ahora de ser asi podrias utilizar algun editor de texto como wordpad o notepad++ para convertir dicho archivo de texto al formato windows o si cuentas con algun SO linux con el comando dos2unix podrias lograr el mismo objetivo lo que hace esto es agregarle el enter al final de cada cambio de linea:
en windows un archivo de texto al final de cada linea tiene un LF+CR (es decir chr(10)+chr(13)) en cambio en linux e unix tiene solo LF (chr(10))

Si por ahi lo descubres ten la gentileza de publicarlo asi todos aprendemos

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema para pasar un archivo de Txt a cursor

Publicado por es_binario (757 intervenciones) el 04/03/2011 17:11:32
Gracias por el apollo a todos, efectivamente me lo mandan de linux y tambien me lo envian de la base de datos mysql.

ahora se que la mejor opcion es abrirlo con excel o con open office y guardarlo en otro formato, pero la razon principal para querer importar el archivo directamente de su formato original es que es una empresa grande que asi le manda los cambios y catalogos a sus clientes me refiero a los cambios de precios que mis clientes estan acostumbrados a actualizar a diario de uno de sus distribuidores en esta caso casas de farmacos.

nadro ---> todo bien
marzam --> todo bien
saba --> con el archivo raro de texto

yo tengo un modulo en mi punto de venta farmacia que hace una actualizacion de precios y unas mecanicas para importar catalogos sin que estas importaciones afecten las existencias.

la otra opcion seria poder importar los datos no de la hoja de texto sino de una hoja de excel ya que el proveedor me da la opcion de darme la misma opcion de bajarlo a excel.

yo como programador no tengo ningun problema en importar, pero requiero que el cliente unicamente nada mas baje la hoja o el archivo que con mi programa le ponga abrir y listo ya estan los cambios y sus informes, que como le hace el programa al cliente no le importa unicamente que funcione.

esa es la principal razon, como muchos saben ya estoy programando mucho en c#, pero al no dominarlo aun como a foxpro, tengo que regresar en ocaciones con esta excelente herramienta y acudir a este foro, que siempre a despejado mis dudas, gracias por el apoyo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema para pasar un archivo de Txt a cursor

Publicado por xx (378 intervenciones) el 04/03/2011 19:10:36
*Entonces la unica opcion viable es con funciones de bajo nivel, y es "CASI" lo mismo desde cualquier
*lenguaje sea C,C++,C#, FOXPRO o cualquier otro lenguaje que permita acceso secuencial y/o aleatorio
*a archivos, por ejemplo en VFP seria algo asi:

*// 1ro TRANSFORMAMOS ARCHIVO DE TEXTO LINUX A WINDOWS ((agregar los enter's en cada fin de linea))

*// apertura archivo original ((LINUX))
_ohan=FOPEN( [oARCHIVO.TXT], 2 )
IF FERROR()!=0 OR _ohan==-1
MESSAGEBOX( [!APERTURA], 16, [ERROR] )
RETURN
ENDIF
*// creacion de archivo temporal ((WINDOWS)
_dhan=FCREATE( [dARCHIVO.TXT], 0 )
IF FERROR()!=0 OR _dhan==-1
FCLOSE( _ohan )
MESSAGEBOX( [!CREAR], 16, [ERROR] )
RETURN
ENDIF

_lin=""
DO WHILE !FEOF( _hano )

*// leemos letra por letra el archivo de origen
_byte=FREAD( _hano, 1)

*// verificamos si se llego al final del archivo
IF FEOF( _hano )
EXIT
ENDIF

*// se supone que cada linea termina con un LF
IF ASC(_byte)==10
FPUTS( _dhan, _lin )
_lin=""
LOOP
ENDIF

*// almacenamos letra por letra
_lin=_lin+_byte

ENDDO
FCLOSE( _ohan )
FCLOSE( _dhan )

*// a esta altura ya tenemos un archivo de texto de linux legible en windows

*// 2do ahora procedemos a leer linea por linea
_han=FOPEN( [dARCHIVO.TXT], 2 )
IF FERROR()!=0 OR _han==-1
MESSAGEBOX( [APERTURA], 16, [ERROR] )
RETURN
ENDIF
DO WHILE .T.

*// leemos una linea por vez lo que se supone es un registro
_lin=FGETS( _han )

*// aca esta lo complejo separar los campos se supone tenes de este modo |campo1|campo2|campoN|
*// lo que habria que hacer es calcular la posicion de cada uno de las barras verticales (|) para extraer
*// el valor que perteneceria a cada campo

*// lo complicado esta en calcular la posicion de inicio y longitud de cada campo deberias utilizar AT()

*si _lin="|campo1|campo2|campoN|"
*// segmentamos el campo 1
_ini=2
_len=6
_campo1=SUBSTR( _lin, _ini, _len)
*// segmentamos el campo 2
_ini=9
_len=6
_campo2=SUBSTR( _lin, _ini, _len)
*// segmentamos el campo 3
_ini=9
_len=6
_campo2=SUBSTR( _lin, _ini, _len)

*// y obviamente aca podrias guardar en una tabla
*INSERT INTO MITABLA (CAMPO1,CAMPO2,CAMPO3) VALUES (_campo1,_campo2,_campo3)
WAIT [REG:]+_lin WINDOWS


*// verificamos fin de archivo
IF FEOF( _han )
EXIT
ENDIF

ENDDO
FCLOSE( _han )

*mi correo es [email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema para pasar un archivo de Txt a cursor

Publicado por Javier Torres (3 intervenciones) el 06/09/2013 18:58:44
Solo cargalo como txt con append y delimitado por pipes y fin

APPEND FROM TABLA type delimited with "" with character "|"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar