El jue, 23-09-2010 a las 11:22 -0500, Manuel Andres Ramirez escribió:

> El 22/09/2010 03:19 p.m., kike jordi escribió:
> > El 22 de septiembre de 2010 15:17, Eduardo Moreno<[email protected]>
> > escribió:
> >
> >          El 22/09/10 08:39, kikejordi escribió:
> >
> >
> >
> >                  Hola, tengo una vieja base de datos hecha con qbasic,
> >                  las tablas son de longitud fija, abriendo el archivo con
> >                  writer se ve una sola fila (no tiene separador de
> >                  registros), hay alguna forma de importarlo con calc
> >                  pasandole
> >                  como parametros la longitud del registro, y la de los
> >                  campos? una vez separados los registros no es dificil
> >                  separar los campos de longitud fija, mi problema es con
> >                  los separadores de registro, no encuentro nada que me
> >                  los separe.
> >
> >                  gracias
> >
> >
> >
> >          La pregunta es, ¿Tu programa  como termina las filas?
> >
> >          Si abres el archivo que generó tu programa con otra aplicación
> >          (gedit o WordPad) ¿También ves una sola fila?
> >
> >          En caso de que si, si sabes que el largo de cada registro es
> >          constante, pues creo que tu solución primera es hacer un
> >          pequeños programa que te vaya segmentando tu texto.
> >
> >          Si tienes el código de tu programa de Qbasic, checa si lo puedes
> >          transformar en un macro o compilalo con RealBasic para que lo
> >          tengas listo para Windows, Linux y MAC.
> >
> >          -
> >
> >
> >
> >
> >          -
> >          Mi Office genera: Seguridad, Confianza y Ahorro
> >
> >
> >          J. Eduardo Moreno
> >          TOKONHU de México
> >          044 55 2748 4840
> >
> >
> >
> >
> >          Ante todo gracias por tu respuesta. Abriendo el archivo con
> >          gedit se ve una sola fila, y si, separando esa fila de acuerdo a
> >          la longitud del registro, que es constante, tengo gran parte de
> >          mi problema solucionado. pero esto es lo que no logro hacer.
> >          intente insertar un caracter especial con el awk con el
> >          siguiente script:
> >
> >           awk 'BEGIN {RS=""} {for(i=1;i<1268;i++) {for(j=1;j<23;j++)
> >          print $(i*j)} print "/n"}' CONCEPTO.PRO>  convert.txt
> >
> > con RS="", hago que lea de a un caracter por vez, el archivo a dividir
> > tiene 27896 caracteres, la longitud de registro= 22, (1268 ciclos de 22
> > da 27986), entonces en el ciclo mas chico imprimia $i*j , el caracter
> > tal como esta en el archivo original, y a la salida del ciclo chico
> > imprime un /n newline, que usaria como separador de registro, pues
> > bueno, si bien no da error, no funciona.
> >
> > transcribo parte del archivo CONCEPTO.PRO (uno de los que tengo que
> > migrar, el mas simple):
> >
> > 82 l99010 DIEZ        82 199110 DIEZ        82 199210 DIEZ
> > 1001990LICENCIA.      1001991LICENCIA.      1001992LICENCIA       80
> > 199010 (Diez)      80 199110 (Diez)      80 199210 (Diez)      81 199010
> > DIEZ        81 199110 DIEZ        81 19929.66 (Nueve.66)40 19909.33
> > (Nueve.33)40 199110 (Diez)      40 199210 (Diez)      48 19908 (Ocho)
> > 48 19918.33 (Ocho.33) 48 19927.66 (Siete.66)1  19908 (ocho)       1
> > 19918.33 (ocho/33) 1  19929.33 (nueve/33)2  19909.66 (Nueve.66)2
> > 19919.66 (Nueve.66)2  199210 (Diez)      3  19909 (Nueve)      3  199110
> > (Diez)      3  199210 (Diez)      4  1990               4  19919.33
> > (nueve.33)4  19929.33 (nueve.33)5  19908.66 (Ocho.66) 5  19919 (Nueve)
> > 5  19929.33 (Nueve.33)6  19919.33 (Nueve.33)6  19929 (Nueve)      7
> > 19908.66 (Ocho.66) 7  19918.66 (Ocho.66) 7  19929 (nueve)      12
> > 19909.33 (Nueve.33)13 19909 (Nueve)      13 1991               13 19929
> > (Nueve)
> >
> > y parte del archivo convert.txt resultante
> >
> > 82
> >
> > l99010
> > DIEZ
> > 82
> > 199110
> > DIEZ
> > 82
> > 199210
> > DIEZ
> > 1001990LICENCIA.
> > 1001991LICENCIA.
> > 1001992LICENCIA
> > 80
> > 199010
> > (Diez)
> > 80
> > 199110
> > (Diez)
> > 80
> > 199210
> > (Diez)
> > 81
> > l99010
> > 82
> > DIEZ
> > 199210
> > 1001990LICENCIA.
> > 1001992LICENCIA
> > 199010
> > 80
> > (Diez)
> > 199210
> > 81
> > DIEZ
> > 199110
> > 81
> > (Nueve.66)40
> > (Nueve.33)40
> > (Diez)
> > 199210
> > 48
> > (Ocho)
> > 19918.33
> > 48
> > DIEZ
> > DIEZ
> > DIEZ
> > 1001992LICENCIA
> > (Diez)
> > (Diez)
> > (Diez)
> > DIEZ
> > DIEZ
> >
> >
> > de nuevo,gracias por tu atencion
> >
> > kike
> >
> Kike y amigos de la lista.
> 
> Prueba estos comandos del shell que te puede ayudar:
> 
> $ i=1;f=22; for ((reg=1;reg<11;reg++)); do cut -c$i-$f CONCEPTO.PRO ; 
> i=$(($f+1));f=$(($f+22)); done > convert.txt
> 
> Funciona para los 10 registros que enviaste a la lista.
> 
> Cordial Saludo.
> 

Estado ausente de la lista por un tiempo y ahora al volver me he
encontrado con este problema que yo tuve meses atrás.
Mi problema era parecido: un fichero de registros de longitud fija (500
caracteres) y sin carácter de separación. Cada registro con campos de
longitud fija.
Solución: "cortar" primero los registros cada 500 caracteres insertando
un final de línea o retorno de carro.
Esto se hace con el comando "sed" de unix/linux.

sed -e 's/\(.\{500\}\)/\1\n/g' entrada > salida.txt

Para saber aquí se explica el comando sed con ejemplos de una forma muy
didáctica.
http://www.gentoo.org/doc/es/articles/l-sed1.xml 

Saludos a todos.

JJ Palacios
Tudela (Navarra)

Responder a