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 caracter correspondiente a un codigo ASCII %s # una cadena de caracteres (string) %d # un entero %f # un real con coma fija %g # un real con decimales %e # un real en notacion cientifica mantisa y exponente, como 1.204e-23 %x # un hexadecimal Modificadores: - # justifica a la izquierda + # obliga a imprimir el signo . # fuerza un min 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 max 2 decimales printf("%.10s",$cadena); # cadena de no mas 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 use strict; my ($nombre,$especie,$peso); ## defino un formato y le pongo nombre # < justifica a la izquierda, > a la derecha , #. definen los campos de numeros # | se usaria para centrar contenido format MIFORMATO = Proteina=@<<<<<<<< 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 ## 'Proteina=1lfu Organismo= M.musculus Peso molecular= 124.5KDa' ## cierro el archivo de salida close(MIFORMATO);
Yo apenas he usado la combinación
format/write
,
así que os recomiendo, si os interesa usarlos, leer
este
documento.
Bruno Contreras-Moreira