• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Generar TXT con campos de ancho fijo

Rugamba

Chapuzas Senior
Registrado
8 Ene 2014
Mensajes
2.407
Puntos
113
Edad
36
Muy buenas a todos, tengo un problemilla.

Tengo una base de datos Paradox, que puedo manipular desde Database Desktop o desde Access, mediante consultas QBE o SQL.

Imaginemos que una consulta me devuelve unos datos, por ejemplo:

[TABLE="class: grid, width: 500"]
[TR]
[TD]Nombre[/TD]
[TD]Apellido[/TD]
[TD]Codigo Postal[/TD]
[TD]Ciudad[/TD]
[TD]Pais[/TD]
[/TR]
[/TABLE]

Una vez obtenidos esos datos, necesito generar un documento de texto txt donde estos campos tengan un tamaño fijo (con espacios en blanco al final, hasta completar) e incluso habrá algún campo vacio. Por ejemplo el documento contendria:

[TABLE="width: 500"]
[TR]
[TD]Nombre
[/TD]
[TD]Apellido
[/TD]
[TD](blanco)
[/TD]
[TD](blanco)
[/TD]
[TD]Codigo Postal[/TD]
[TD]Pais[/TD]
[TD](blanco)
[/TD]
[TD](blanco)
[/TD]
[TD]Ciudad[/TD]
[TD](blanco)
[/TD]
[/TR]
[TR]
[TD](20 caracteres)[/TD]
[TD](20 char)[/TD]
[TD](10 char)[/TD]
[TD](10 char)[/TD]
[TD](10 char)[/TD]
[TD](5 char)
[/TD]
[TD](15 char)
[/TD]
[TD](5 char)[/TD]
[TD](10 chat)
[/TD]
[TD](5 char)
[/TD]
[/TR]
[/TABLE]

Me daría igual tener que pasar el resultado de la consulta por un excel por ejemplo y generar el documento desde ahi, pero esque no consigo que los campos siempre tengan el mismo ancho...

Si alguien me puede ayudar se lo agradecería muchisimo.
 
¿Un .txt? ¿No hay otro formato mejor para exportar esa información? Es que... Vaya, hace que no veo una cosa así... Pero vaya lo que pida el cliente, supongo.

Si ya tienes como indicas la anchura de los campos definidos, yo añadiría +3 a cada uno para dejar un espacio en blanco entre medias de cada uno y un separador.

| asd | asd | asd

Luego sería abrir una línea en el .txt, imprimir el separador y un espacio ('|' + ' '), imprimir el valor, hacer una resta entre longitud de campo y longitud de variable y en consecuencia añadir espacios. Al acabar, añadir un espacio más y empezar otra vez la secuencia ('|' + ' ') y cuando acabes pues dar salto de línea y mover el cursor a la siguiente fila.



Campo nombre: varchar de 20
Nombre: Randy

Campo apellido: varchar de 20
Apellido: Pérez

1.- Imprimo separador y espacio:
Código:

2.- Imprimo mi valor:
Código:
|·Randy

3.- Longitud_Campo - Variable.len(20 - 5): 15

4.- Añadir el resultado de dicha operación:
Código:
|·Randy···············

5.- Añadir el espacio separador:
Código:
|·Randy················

Y con apellido igual. La separación la tendrías cada vez que añadieras una nueva columna, dado que por cada iteración en columna te añadiría el separador y el espacio al comienzo:
Código:
|·Randy················|·Pérez················

Se me ocurre, no sé.
Si tienes espacios en blanco obviamente la longitud va a ser 0 (siempre que no sea null), entonces 20 - 0 = 20 pues 20 espacios. A través de los lenguajes de manejo de la base de datos puedes pedir la longitud de caracteres de los campos para tenerlos en cuenta y te puedes hacer una función que se trague todas las queries que le eches y no tengas que reescribir ese código nunca. Cuando acabes pues cierras tu flujo hacia el archivo para sellarlo y hala.

Pero vamos, exportar a .txt... Es que luego qué haces con esa información xD Yo lo sacaría a JSON, XML... no sé.
 
Pero vamos, exportar a .txt... Es que luego qué haces con esa información xD Yo lo sacaría a JSON, XML... no sé.

Muchas gracias por tu respuesta, me convence el procedimiento ;).

Pues lo de usar un txt es por que este fichero sirve para rellenar un formulario de una web(es la web de una agencia de transporte y lo que se graban son los envios para la generación de las etiquetas) y claro pues el formato...el que me diga el de la web que tiene que ser, jeje.
 
Arriba