2009-03-06 18 views
18

Estoy tratando de escribir en un archivo de Perl. Solo quiero escribir los datos en formato delimitado por tabuladores. Sin embargo, los datos que estoy escribiendo tienen longitudes variables y no están alineados.¿Cómo escribo texto en columnas alineadas en Perl?

Por ejemplo, yo estoy tratando de escribir algo como esto:

Name Education Fav_Car MoneyInBank 
josh High School Porche 500 
SomeOtherName PHD Hyundai 50000 

sólo quiero que los datos sean alineados con los encabezados que tengo en la parte superior.

Estoy emitir los datos de este modo:

printf FILE ("%s%20s%20s\n", "Name", "Ed", "Car"); 
while (($name, $ed, $car) = $sth->fetchrow_array) { 
     printf FILE ("%s>>>>>>>>>>>>>%40s%40s\n", $name, $ed, $car); 
}; 

Respuesta

26

datos delimitados por tabuladores (donde los campos no son consistentes en longitud) no se alinea cuando se abre en un editor de texto.

Soluciones:

  • abrir el archivo en una hoja de cálculo.
  • Ábrala en un procesador de textos, seleccione todo el texto y defina las tabulaciones adecuadas. (gracias, Justsalt)
  • En su editor de texto, establezca el ancho de su pestaña en un valor mayor que cualquiera de sus campos.
  • Utilice espacios en lugar de pestañas (por ejemplo, printf con anchuras de campo, o formats).

Por ejemplo, es posible utilizar

printf("%-15s %-15s %-10s %9s\n", $name, $edu, $car, $cash); 

El - después de la % hace que el campo para ser justificado a la izquierda. Los números (como el dinero) generalmente están justificados a la derecha (que es el valor predeterminado).

+1

O ábralo en un procesador de textos y defina las tabulaciones adecuadas. – Justsalt

6

Eche un vistazo al comando Perl format.

+0

No utilizaría el formato para ningún proyecto nuevo, use Perl6 :: Form en su lugar. –

1

El printf hace esto, como en C durante 20 campos de caracteres:

printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money); 
+0

¿Es necesario que sean% -20 para justificar a la izquierda? –

+0

¿cómo puedo hacer que se justifique a la izquierda? –

+0

@styris: ¡Vea el comentario de Daniel L sobre esta misma pregunta! –

2

Además de printf forma de C se puede ajustar la anchura dinámicamente con "*",

printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car"); 
1

Si está trabajando en Linux, una solución fácil sería utilizar column comando del sistema, con el - t bandera. simplemente imprima la tabla separada por espacios en un archivo, y simplemente use el comando de columna en ese archivo.

system("column -t file > new_file"); 
Cuestiones relacionadas