next up previous index
Siguiente: Llamadas al sistema operativo Subir: Entrada, salida y formateo de datos Anterior: Entrada, salida y formateo de datos   Índice de Materias

Formateo de datos

Ya hemos usado en diferentes ejemplos la función print. Esta función puede usarse para dar formato a los datos que queremos imprimir en un programa. Una manera práctica muchas veces utilizada en bioinformática es imprimir datos en un archivo por columnas, de forma que todas las líneas tengan el mismo número de columnas. Como separadores de columnas pueden utilizarse carácteres como \t (tabulador), espacios en blanco o comas:

print "$nombreGen \t $GC \t $longitud \t $especie\n";
print "$nombreGen $GC $longitud $especie\n";
print "$nombreGen,$GC,$longitud,$especie\n";

Este tipo de formatos de salida son ideales para que otros programas en Perl, por medio de la función split, puedan leerlos. De hecho son también adecuados para que aplicaciones como Excel u OpenOffice puedan abrir estos archivos.

Sin embargo, a veces es realmente importante, como en el formato PDB, que cada elemento de datos ocupe un grupo de columnas específico de una línea de archivo. En este caso es recomendable el uso de la función printf .

printf es muy similar (no sé si idéntica) a la misma función del lenguaje C y su uso es relativamente sencillo. Su síntaxis es:

printf("cadena formateada %s %1.2f",$escalar1,$escalar2,...);
Dentro de la cadena de caracteres formateada se puede hacer referencia a escalares que queramos formatear. Cada una de estas referencias comienza con el símbolo % y deberá haber tantas como escalares separados por comas en la parte izquierda de la llamada a printf. Además, cada referencia debe especificar el formato de salida deseado:
%c        # el carácter correspondiente a un código ASCII
%s        # una cadena de caracteres (string)
%d        # un número entero
%f        # un número real con coma fija
%g        # un real con decimales
%e        # un real en notación científica exponencial, como 1.204e-23
%x        # un hexadecimal

Modificadores:
-      # justifica a la izquierda
+      # obliga a imprimir el signo
.      # fuerza un mínimo número de columnas para un campo
0      # usa ceros para justificar a la derecha
 
Ejemplos:
 
printf("%1.2f",$real);           # un real de que ocupe al menos 1 columna 
                                 # y tenga un máximo de 2 decimales

printf("%.10s",$cadena);         # cadena de no más de 10 columnas

Finalmente, Perl incluye la posibilidad de definir formatos de otra manera, usando las funciones format y write, que entenderemos mejor con un ejemplo:

#!/usr/bin/perl -w 
# Ejemplo escrito por Bruno Contreras en Julio de 2005

use strict; 

my ($nombre,$especie,$peso);

## defino un formato y le pongo nombre
# < justifica a la izquierda, > a la derecha , #. definen los campos de números
# | se usaría para centrar contenido
format MIFORMATO =
Proteína=@<<<<<<<<  Organismo=@>>>>>>>>>>>>  Peso molecular=@###.#KDa
           $nombre,             $especie,                   $peso
.			   

## abro el archivo de salida con un descriptor cuyo nombre coincida 
## con el formato de salida
open(MIFORMATO,">salida.txt") || die "no puedo crear salida.txt\n";

## aquí asigno valores a las variables del formato, normalmente será un bucle
$nombre  = "1lfu";
$especie = "M.musculus";
$peso    = "124.456";

write (MIFORMATO);
## imprime en el archivo de salida
## 'Proteína=1lfu       Organismo=   M.musculus  Peso molecular= 124.5KDa'


## cierro el archivo de salida
close(MIFORMATO);

Yo reconozco que nunca uso la combinación format/write, así que os recomiendo, si os interesa usarlos, leer este documento.


next up previous index
Siguiente: Llamadas al sistema operativo Subir: Entrada, salida y formateo de datos Anterior: Entrada, salida y formateo de datos   Índice de Materias
Bruno Contreras Moreira 2007-06-15