Clipper/FiveWin - TRASPASO DE DATOS DESDE TXT

 
Vista:

TRASPASO DE DATOS DESDE TXT

Publicado por Gabriel Martin (10 intervenciones) el 04/04/2006 12:14:54
Muy buenas a todos:

Tengo una aplicacion que traspasa los datos desde un fichero formato csv / txt a un dbf mediante
APPEND FROM &cFichero SDF

Todo muy bien hasta que el fichero a traspasar cuenta con 2000 caracteres por lineas.
El DBF de destino conseguí hacerlo de 1024 caracteres que creo es el máximo.

¿Teneis idea de como puedo selecionar parte del fichero cFichero antes de ser traspasado ya que parte de el es desestimable y justamente la que se encuenta al final es la que necesito?

Este tipo de fichero es facilmente aperturable con excell pero al intentar transportarlo a un DBF lo corrompe, supongo que por el tamaño, y no consigo abrirlo

Espero con impaciencia, la que seguro será una de buestras mágicas respuesta.

Mil grcaias por vuestra ayuda

CLIP53, FW2.3,BLK7
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:TRASPASO DE DATOS DESDE TXT

Publicado por Antoni Masana (168 intervenciones) el 04/04/2006 13:28:49
Si puedes ejecutar un comando en MS-DOS tengo una utilidad que te permitiria cortar un fichero TXT o CSV, puedes seleccionar por campos o posiciones fijas.

Tiene algunos limites pero puede servir.

Esta es la Ayuda

C:\>cut /?

CUT 1.00. (C) J.M. Aguirregabiria 1987

Uso: CUT /{c|f|r}n1[-n2][,n3[-n4] ...] [/dc] [[d:][\][camino\]nombre[.ext]]

Pone en la salida estándar las columnas (si se usa «/c») o campos (si
se usa «/f») seleccionados del fichero especificado (o de la entrada estándar
si aquél falta) El delimitador de campo es el tabulador, pero puede cambiarse
con «/dc» al carácter «c» y con «/d" "» al espacio. Los conmutadores pueden ir
en mayúsculas o minúsculas, aparecer en cualquier punto e ir precedidos de «/»
o «-». Ningún espacio debe separarlos del argumento.
El primer valor de columna o campo es 1, y el último 10240.
Sólo se guarda un delimitador entre campos.
Se usan todas las líneas, hasta un máximo de 32768,
excepto si las mismas se eligen con «/r».

C:\>

Si te interesa te lo puedo enviar.
Un saludo.
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:TRASPASO DE DATOS DESDE TXT

Publicado por Gabriel Martin (10 intervenciones) el 04/04/2006 19:26:31
Pues de momento y a espera de una solucion diferente, me harías un favor si me lo envías. A espensas de que te haga alguna pregunta sobre su utilizacion

Mil gracias Antoni, que ya vas siendo un habitual de mis preguntas, al final te pondre´en los creditros ;)

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:TRASPASO DE DATOS DESDE TXT

Publicado por Antoni Masana (168 intervenciones) el 06/04/2006 06:13:47
Te lo envio por correo.

Un Saludo.
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:TRASPASO DE DATOS DESDE TXT

Publicado por Marcelo (218 intervenciones) el 06/04/2006 19:47:08
No probaste usar las funciones fOpen(), fRead()?
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:TRASPASO DE DATOS DESDE TXT

Publicado por Antoni Masana (168 intervenciones) el 11/04/2006 12:46:38
Gabrie: ¿ Te llego el correo que te envie ?
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:TRASPASO DE DATOS DESDE TXT

Publicado por Gabriel Martin (10 intervenciones) el 11/04/2006 19:01:55
Buenas Antoni:

Pues la verdad es que no. Si eres tan amable de volver a intentarlo me harás un favor.

Mil Gracias
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:TRASPASO DE DATOS DESDE TXT

Publicado por Gabriel Martin (10 intervenciones) el 11/04/2006 19:03:25
El txt trae datos en lineas separadas por salto de pagina
¿Como hago para indicar que parte de que liena a de traspasar a la variable con el fRead()?

Gracias
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:TRASPASO DE DATOS DESDE TXT

Publicado por Marcelo (218 intervenciones) el 11/04/2006 23:11:21
Con Fseek() indicas donde se va a parar el puntero, y con fRead() lees la cantidad de posiciones que vos queres. Fijate que los argumentos de Fseek son:
FSEEK(<nManejador>, <nDesplazamiento>, [<nOrigen>])
A medida que vas leyendo el archivo, aumentas nDesplazamiento hasta la posicion que leiste, mas el nro. de caracteres que no precisas. Cuando vuelvas a leer, vas a empezar en la posicion que valga nDesplazamientos, y vas a leer la cantidad que vos establezcas en nBytes:
FREAD(<nManejador>, @<cVarMemInter>, <nBytes>)

Esto obviamente lo haces en un bucle. Fijate la documentacion, creo que hasta hay ejemplos.

Marcelo
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:TRASPASO DE DATOS DESDE TXT

Publicado por Antoni Masana (168 intervenciones) el 12/04/2006 06:16:21
Gabriel:

Te he enviado por enesima vez el programa, haber si esta vez tengo suerte y te llega. Los filtros del correo lo hace muy dificil.

Tambie te envia esta rutina para leer ficheros de texto. No recordaba que la tenia.

Esta rutina lee un fichero de texto (en mi caso un fichero INI) .
Seguramente necesitadas hacer alguna modificación en los valores de las variables locales (LongitudLinea, TamanoTabulador, etc).
La saque de algun sitio, funciona pero no se muy bien como.

* </> ------------------------------------------------------------------ </>
* </> ---&--- </> Lee el fichero CajaWin.INI </> ---&--- </>
* </> ------------------------------------------------------------------ </>

FUNCTION Leer_INI(c_Fich)
LOCAL nLongitudLinea := 90 ,;
nTamanoTabulador := 3 ,;
lSaltoLinea := .T.

LOCAL nLineas, nLineaActual, cTexto, c_Linea, c_Tipo, a_Datos
LOCAL c_Regis:={"","","","","","","","","","","",""}

cTexto := MemoRead(c_Fich)

nLineas := MLCOUNT(cTexto, nLongitudLinea, nTamanoTabulador, lSaltoLinea)

FOR nLineaActual := 1 TO nLineas
c_Linea:=RTRIM(MEMOLINE(cTexto, nLongitudLinea, nLineaActual,;
nTamanoTabulador, lSaltoLinea))
c_Tipo := left(c_Linea,6)
a_Datos:= substr(c_Linea,8)

DO case
case c_Tipo=="[CajaW"; c_Regis[ 1]:=c_Linea
case c_Tipo=="RUNBAT"; c_Regis[ 2]:=a_Datos
case c_Tipo=="SO_WAV"; c_Regis[ 3]:=a_Datos
case c_Tipo=="TRUCAR"; c_Regis[ 4]:=a_Datos
case c_Tipo=="NOCONE"; c_Regis[ 5]:=a_Datos
case c_Tipo=="ONLINE"; c_Regis[ 6]:=a_Datos
case c_Tipo=="PENXAR"; c_Regis[ 7]:=a_Datos
case c_Tipo=="ETIQUE"; c_Regis[ 8]:=a_Datos
case c_Tipo=="ETI_OK"; c_Regis[ 9]:=a_Datos

case c_Tipo=="ESPERA"; c_Regis[10]:=a_Datos
case c_Tipo=="CAIXES"; c_Regis[11]:=a_Datos
case c_Tipo=="VERSIO"; c_Regis[12]:=a_Datos
ENDCASE
NEXT
RETURN (c_Regis)


Fichero INI (para hacer pruebas)

[CajaWin - Comandos]
RUNBAT=C:\TPV\Menu.bat
SO_WAV=C:\TPV\Tmp\Sonido.tmp
TRUCAR=C:\TPV\Tmp\Trucar.tmp
ONLINE=C:\TPV\Tmp\Trucar.ok
NOCONE=C:\TPV\Tmp\Trucar.err
PENXAR=C:\TPV\Tmp\Penxar.tmp
CAIXES=C:\TPV\Tmp\Caixes.txt
ETIQUE=C:\TPV\Tmp\Etiq-Win.txt
ETI_OK=C:\TPV\Tmp\Etiq-Win.ok
ESPERA=600
PASSWD=dos.root
VERSIO=Ver. 2.05 - 00 22:05:37 - 25/11/2005
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:TRASPASO DE DATOS DESDE TXT

Publicado por Antoni Masana (168 intervenciones) el 19/04/2006 13:17:30
Ante la imposibilidad de enviar ningun fichero por correo te envio esta direccion donde puedes encontrar los comandos de unix.

http://openetwork.com/berk.html

Tambien te envio la ayuda o el documeto asociado a mi CUT.COM. (para que sepas como funciona)

No se si el de la WEB funciona igual y cual es la limitacion que tiene.


***********
** CUT ** Versi¢n: 1.00 ( 2-01-88)
*********** ========================

DESCRIPCION: Realizaci¢n del filtro CUT de UNIX:
Corta columnas o campos y/o l¡neas de ficheros.

USO: CUT /{c/f/r}n1[-n2][,n3[-n4] ...] [/dc] [fichero]

ACCION: Pone en la salida est ndar las columnas (si se usa /c)
o campos (si se usa /f) seleccionados del "fichero" o
de la entrada est ndar si aqu‚l falta. El delimitador de
campo es el tabulador, pero puede cambiarse con /dc al
carácter c y con -d"" al espacio. Tambi‚n pueden
elegirse las l¡neas que se desean con /r

OPCIONES:
-c indica las columnas a retener.
-f indica los campos a retener.
-r indica las l¡neas a retener. Esta opci¢n puede
usarse s¢lo o con una de los dos primeras, que son
incompatibles entre s¡.
-dc indica que el delimitador de campo es el car cter
c, en lugar del tabulador.
-d" " indica que el delimitador de campo es el espacio
c, en lugar del tabulador.
- Las opciones c, f y r deben ir inmediatamente seguidos
de uno o varios rangos de valores separados por comas y
de la forma:
n S¢lo el valor n.
n1-n2 Los valores entre n1 y n2.
- Las opciones pueden empezar con ®-¯ o con ®/¯, ir en
may£sculas o min£sculas, aparecer en cualquier lugar e,
incluso, agruparse.

EJEMPLOS:
- CUT /c11-10240 /r11-50 <fichero
pone en la salida est ndar las l¡neas que con n£meros 11-
50 del fichero indicado tras haberles quitado las
primeras 10 columnas
- CUT -f2,4-6 -d" " fichero >out
pone en OUT las palabras (separadas por espacios) n£meros
2, 4, 5 y 6

NOTAS: - ®fichero¯ puede incluir unidad, directorio y extensi¢n.
- Si ®fichero¯ no se especifica se usa la entrada
est ndar (stdin).
- El resultado se env¡a a la salida est ndar (stdout) y
puede ser redirigido.

AYUDA: CUT -?, o un error, dan una pantalla de ayuda.

LIMITACIONES:
Se supone que las l¡neas de los ficheros no son m s de
32768 y que no superan los 10240 caracteres.

CODIGOS DE SALIDA Y ERRORES:
0 Ning£n error. Incluye uso de -? y /?.
1 Cancelado por el usuario.
2 Conmutador desconocido.

Tambien te envio una rutina para leer ficheros de texto.

Esta rutina lee un fichero de texto (en mi caso un fichero INI) .

Seguramente necesitadas hacer alguna modificación en los valores de las variables locales (LongitudLinea, TamanoTabulador, etc).

La saque de algun sitio, funciona pero no se muy bien como.

* </> ------------------------------------------------------------------ </>
* </> ---&--- </> Lee el fichero CajaWin.INI </> ---&--- </>
* </> ------------------------------------------------------------------ </>

FUNCTION Leer_INI(c_Fich)
LOCAL nLongitudLinea := 90 ,;
nTamanoTabulador := 3 ,;
lSaltoLinea := .T.

LOCAL nLineas, nLineaActual, cTexto, c_Linea, c_Tipo, a_Datos
LOCAL c_Regis:={"","","","","","","","","","","",""}

cTexto := MemoRead(c_Fich)

nLineas := MLCOUNT(cTexto, nLongitudLinea, nTamanoTabulador, lSaltoLinea)

FOR nLineaActual := 1 TO nLineas
c_Linea:=RTRIM(MEMOLINE(cTexto, nLongitudLinea, nLineaActual,;
nTamanoTabulador, lSaltoLinea))
c_Tipo := left(c_Linea,6)
a_Datos:= substr(c_Linea,8)

DO case
case c_Tipo=="[CajaW"; c_Regis[ 1]:=c_Linea
case c_Tipo=="RUNBAT"; c_Regis[ 2]:=a_Datos
case c_Tipo=="SO_WAV"; c_Regis[ 3]:=a_Datos
case c_Tipo=="TRUCAR"; c_Regis[ 4]:=a_Datos
case c_Tipo=="NOCONE"; c_Regis[ 5]:=a_Datos
case c_Tipo=="ONLINE"; c_Regis[ 6]:=a_Datos
case c_Tipo=="PENXAR"; c_Regis[ 7]:=a_Datos
case c_Tipo=="ETIQUE"; c_Regis[ 8]:=a_Datos
case c_Tipo=="ETI_OK"; c_Regis[ 9]:=a_Datos
case c_Tipo=="ESPERA"; c_Regis[10]:=a_Datos
case c_Tipo=="CAIXES"; c_Regis[11]:=a_Datos
case c_Tipo=="VERSIO"; c_Regis[12]:=a_Datos
ENDCASE
NEXT
RETURN (c_Regis)

Fichero INI (para hacer pruebas)

[CajaWin - Comandos]
RUNBAT=C:\TPV\Menu.bat
SO_WAV=C:\TPV\Tmp\Sonido.tmp
TRUCAR=C:\TPV\Tmp\Trucar.tmp
ONLINE=C:\TPV\Tmp\Trucar.ok
NOCONE=C:\TPV\Tmp\Trucar.err
PENXAR=C:\TPV\Tmp\Penxar.tmp
CAIXES=C:\TPV\Tmp\Caixes.txt
ETIQUE=C:\TPV\Tmp\Etiq-Win.txt
ETI_OK=C:\TPV\Tmp\Etiq-Win.ok
ESPERA=600
PASSWD=xxxxxxxx
VERSIO=Ver. 2.05 - 00 22:05:37 - 25/11/2005
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