• Publicidad

printf

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

printf

Notapor Khris » 2009-06-13 12:52 @578

Agradecería mucho que alguien me explicase cómo utilizar el comando "fprint" y para qué sirve exactamente.

Es que no sé dónde buscar información acerca de él, por eso se me ha ocurrido preguntar aquí. Muchas gracias :) .


EDITO: Por cierto, el objetivo es imprimir una tabla bastante larga con él.

He encontrado esto: http://perlenespanol.com/tutoriales/fun ... rintf.html, pero no me sirve para lo que quiero, o no sé cómo hacer lo de la tabla a partir de esa información, pues son muchos datos los que quiero poner en la tabla.
Última edición por Khris el 2009-06-16 14:08 @631, editado 1 vez en total
Khris
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-14 18:52 @828

Publicidad

Notapor explorer » 2009-06-13 14:27 @644

fprintf() es una función para salida formateada hacia un flujo de salida o fichero que forma parte de las librerías estándar del lenguaje C y derivados. En Perl, su labor la realiza la función printf().

En cuanto a la forma de sacar la tabla, sería interesante saber cómo quieres sacar esa tabla. El formato de salida lo compones dentro del printf(), cuya salida será hacia el fichero correspondiente al manipulador de fichero que indiques.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
printf MANIPULADOR "%d\t%d\n", $columna1, $columna2;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Khris » 2009-06-13 14:43 @655

Ajá, eso es lo que me hace falta, creo ^^ .

La tabla la sacaría en un documento de texto aparte, con eso no hay problema.

El problema, para mí, es que la tabla tiene varias filas (como cualquier tabla), y en cada fila tiene que poner una cosa distinta.

La tabla sería de la forma:

Código: Seleccionar todo
                     Organismo 1

#Codon | AA | Fraction | Number
GCA      |  A  | 0.331    | 4002
GCC      |  A  | 0.182    | 2201

etc.

Con otro organismo más (Organismo 2), del que también hay que poner "Fraction" y "Number" a continuación de los del Organismo 1. Y las filas de la tabla son una lista de todos los codones posibles.

El problema es: sí, puedo hacer el formato de printf() para una fila, pero, ¿cómo hago para que se impriman todas las filas de la tabla con los datos que quiero?

Muchas gracias.
Khris
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-14 18:52 @828

Notapor explorer » 2009-06-14 15:39 @694

Pues eso se puede resolver con algo como los format, pero al ser algo sencillo, se puede hacer de forma directa:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;


my @resultados = (
    {
        organismo => 1,
        analisis  => [
                        [ 'GCA', 'A', 0.331, 4002 ],
                        [ 'GCC', 'A', 0.182, 2201 ],
        ],
    },
    {
        organismo => 2,
        analisis  => [
                        [ 'GCT', 'A', 0.381, 6002 ],
                        [ 'GTC', 'B', 0.824, 3201 ],
        ],
    },

);

foreach my $resultado (@resultados) {

    print "                     Organismo ", $resultado->{organismo}, "\n";
    print "\n";
    print "#Codon | AA | Fraction | Number\n";

    foreach my $analisis (@{$resultado->{analisis}}) {
        printf "%-9s|  %s  | %-8.3f | %d\n", @$analisis;
    }

    print "\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-06-19 19:11 @841, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Khris » 2009-06-16 13:13 @592

¡Gracias!

Así que el truco para que salga la tabla es tener los datos almacenados en un array y utilizar un bucle foreach() que los vaya imprimiendo línea a línea. Vale, me lo apunto, ¡gracias de nuevo!
Khris
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-14 18:52 @828

Notapor explorer » 2009-06-16 13:35 @607

hummm... no... no hay truco...

Consiste en remedar la estructura de datos que tienes, en una serie de sentencias lógicas, que imiten la salida que queremos.

Como no nos has contado cómo es tu estructura de datos, pues yo me he inventado una. Y de ella he deducido la forma de recorrerla. Pero si cambiamos la estructura de datos, se hará de otra forma.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Khris » 2009-06-19 16:31 @729

:lol: No puedo hacer más que darte la razón, sólo era una forma de hablar, entiendo la diferencia ^^ .

Creo que voy a replantear el problema. Como no sé cómo contar de qué forma sería mi estructura de datos, ahora hago una pregunta un poco distinta:

Tengo los datos de cada columna almacenados en sendos arrays, y quiero imprimir la tabla. ¿Cómo podría hacerlo? ¿Se puede usar printf en ese caso?
Khris
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-14 18:52 @828

Notapor explorer » 2009-06-19 19:26 @851

Claro que sí. Ya te he dicho que todo depende de cómo los tienes almacenados. Pero la forma de presentarlo es la misma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my @codones    = qw( GCA GCC GTA GAT );
my @aa         = ('A') x 4;
my @fracciones = (0.331, 0.182, 0.421, 0.709);
my @number     = (2300, 1200, 8722, 832);

print "                     Organismo 1\n";
print "\n";
print "#Codon | AA | Fraction | Number\n";

for(my $i = 0; $i < @codones; $i++) {
    printf "%-9s|  %s  | %-8.3f | %d\n", $codones[$i], $aa[$i], $fracciones[$i], $number[$i];
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Aunque en algunas casos tendrás que escribir más. En este segundo ejemplo, fíjate que en el printf() he tenido que dar el nombre de todos los arreglos, porque estamos guardando cada columna en cada uno, porque así es como lo has descrito.

Ahora bien, si guardaras todas las columnas en un arreglo de arreglos, la cosa sería algo distinta.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my @analisis = (
    [ qw( GCA GCC GTA GAT )      ],
    [ ('A') x 4                  ],
    [ 0.331, 0.182, 0.421, 0.709 ],
    [ 2300, 1200, 8722, 832      ],
);

print "                     Organismo 1\n";
print "\n";
print "#Codon | AA | Fraction | Number\n";

for(my $i = 0; $i < 4; $i++) {
    printf "%-9s|  %s  | %-8.3f | %d\n", map { $analisis[$_][$i] } 0 .. 3;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Y sale lo mismo.

Como ves, depende de la organización que quieras mantener.

Ya tienes tres ejemplos con el mismo printf().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Khris » 2009-06-23 05:34 @273

¡Muchísimas gracias! Era exactamente lo que estaba buscando.
Khris
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-04-14 18:52 @828


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron