Generar planos

RadicalEd willian.radicaled en gmail.com
Vie Ago 29 19:01:10 CEST 2008


Siguiendo con este post un poquito viejo, se me presento la oportunidad de
utilizarlo y es que necesito generar un archivo plano de nuestro sistema, la
solución de lasizoillo me ayuda bastante pero quisiera saber como acomodar
los datos tanto en izquierda como en derecha, ya que la impresión de
%-20s%-10s%-5s" % ("hola", "don", "tu") solo imprime hacía la izquierda y
pues yo necesito algo así:
%-6d%-3d%-10s%-30s" % (1321, 052, 30, "AZUCAR INCAUCA")

Los números hacía la derecha las cadenas hacía la izquierda
  1321052        30AZUCARINCAUCA

Alguna ayuda???
Gracias


2008/2/22 Manuel Enrique González Ramírez <maengora en gmail.com>

> Chema muchas gracias, seguiré tu consejo y probaré la solución que me has
> enviado.
>
> El día 22/02/08, Chema Cortes <py en ch3m4.org> escribió:
> >
> > El Wednesday 20 February 2008 03:54:48 Manuel Enrique González Ramírez
> > escribió:
> >
> >
> > > tengo una base de datos denominada prueba que contiene una tabla
> llamada
> > > ejm que esta compuesta
> > > por tres registros (apellido1,apellido2 y nombres).
> > >
> > > Lo que necesito es generar una consulta que me liste todos los
> registros
> > y
> > > que a su vez los
> > > almacene en la unidad pero... (aquí es donde viene el rollo) al momento
> > de
> > > ser almacenados
> > > éstos registro deben estar separados por espacios, por ejemplo el
> primer
> > > espacio que es para el
> > > campo APELLIDO1 no debe exceder de 12 caracteres, es decir, que por más
> > > largo que se el apellido1
> > > éste solo ubicara hasta un máximo de 12 caracteres; a partir de la
> > > "columna" 13 se ubicaría el
> > > apellido2 y éste ocuparía hasta la columna 25 y a partir de la 26 va el
> > > nombre.
> > >
> > > El formato sería más o menos así
> > > -------------------------------------------------
> > > Nombre Campo | Longitud | Posición | Tipo
> > > -------------------------------------------------
> > > APELLIDO1      | 12         | 01 a 12  | Alfanumerico
> > > APELLIDO2      | 12         | 13 a 25  | Alfanumerico
> > > NOMBRES        | 12         | 26 a 50  | Alfanumerico
> > >
> > >
> > > Un amigo de la lista me envio esta solución
> > >
> > > >>> "%-20s %-10s %-5s" % ("hola", "don", "tu")
> > >
> > > 'hola                don       tu   '
> > >
> >
> > > [...]
> > >
> >
> > Lo primero, sugerirte que mandes el mínimo de código que ilustre el
> > problema.
> > Harás que no perdamos tiempo en poder ayudarte. No era necesario todo el
> > código sobre wx, que nada aportaba a centrar el problema.
> >
> >
> > >     def generar_da(self,event): #init function
> > >         #[62d]Code event VwX...Don't modify[62d]#
> > >         #add your code here
> > >         sql = c.execute('SELECT %-25s, %-25s FROM
> > > ejm'%('nombre','apellido'))
> >
> >
> > Ésto no está bien. El formato no tiene que ir en la consulta SQL; es
> > después
> > cuando tienes que tratar la información recibida.
> >
> >          sql = c.execute('SELECT nombre, apellido FROM ejm')
> >
> >
> > >         res = c.fetchall()
> > >
> > >         if res<>None:
> > >             f = open('c:/guardar.dat','a')
> > >             for i in res:
> > >
> > >                 f.write(str(i[0]))
> > >                 f.write(str(i[1]+'\n'))
> >
> >
> > Aquí es donde debes formatear la cadena antes de enviarla al fichero:
> >
> >    f.write("%-25s, %-25s\n" % i)
> >
> > Por cierto, existe una forma más "pythónica" para hacer ésto (aunque no
> se
> > usa
> > mucho):
> >
> >    print >>f, "%-25s, %-25s" % i
> >
> > >
> > >             f.close()
> >
> >
> > Mejor aún sería trabajar con iteradores. Con los iteradores no se
> malgasta
> > memoria guardando el resultado completo de la consulta antes de empezar a
> > escribir en el fichero:
> >
> >   sql = cur.execute('SELECT nombre, apellido FROM ejm')
> >
> >   f = open('c:/guardar.dat','a')
> >
> >   f.writelines("%-25s, %-25s\n" % row for row in cur)
> >
> > Por último, y para rizar un poco más el rizo, para el problema de
> > "truncar" el
> > resultado, puedes emplear una función para truncar:
> >
> >   def trunc(s,n):
> >     return s[:n].ljust(n)
> >
> >   ...
> >   f.writelines(trunc(a)+trunc(b) for (a,b) in cur)
> >
> >
> > _______________________________________________
> > Lista de correo Python-es
> > http://listas.aditel.org/listinfo/python-es
> > FAQ: http://listas.aditel.org/faqpyes
> >
> >
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>



-- 
The knowledge is the most dangerous
weapon & SoloCodigo is the most important programing webforum.
http://foros.solocodigo.com
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es