Foros del Web » Programación para mayores de 30 ;) » Programación General »

Datos de un array

Estas en el tema de Datos de un array en el foro de Programación General en Foros del Web. tengo el siguiente elseif: elsif ( $printingtype eq 'PATCRD' ) { my $patron_data = $item; #FIXME: This needs to be paramatized and passed in from ...
  #1 (permalink)  
Antiguo 17/12/2008, 10:27
Avatar de tammyrey  
Fecha de Ingreso: octubre-2008
Ubicación: Galicia :)
Mensajes: 95
Antigüedad: 15 años, 6 meses
Puntos: 1
Datos de un array

tengo el siguiente elseif:

elsif ( $printingtype eq 'PATCRD' ) {
my $patron_data = $item;
#FIXME: This needs to be paramatized and passed in from the user...
#Each element of this hash is a separate line on the patron card. Keys are the text to print and the associated data is the point size.

warn "patron_data_branchname: ".$patron_data->{'branchname'};
warn "patron_data_description: ".$patron_data->{'description'};

my $text = {
$patron_data->{'branchname'} => ($fontsize + 3),
$patron_data->{'description'} => $fontsize
};
warn "************TEXT:".Data::Dumper::Dumper($text );
$DEBUG and warn "Generating patron card for cardnumber $patron_data->{'cardnumber'}";
warn "XPOS:".$x_pos;
drawbox( $x_pos, $y_pos, $label_width, $label_height ) if $guidebox;
my $barcode_height = $label_height / 2.75; #FIXME: Scaling barcode height; this needs to be a user parameter.
DrawBarcode( ($x_pos), $y_pos, $barcode_height, $label_width, $patron_data->{'cardnumber'},
$barcodetype );
DrawPatronCardText( $x_pos, $y_pos, $label_height, $label_width, $fontname, $fontsize,
$left_text_margin, $text_wrap_cols, $text, $printingtype );
CalcNextLabelPos();
}


como veis he puesto 3 warn para ver lo que sucede.... mi problema es que en $text se tiene que guardar primero la biblioteca y luego la descripción... y aparentemente eso es lo que va a hacer....

pero si vemos el resultado del ultimo warn en el putty, en algunos casos me pasa lo siguiente:

************TEXT:$VAR1 = {
'Investigador' => 7,
'Laxe 2' => 10
};

es decir, introduce la descripción antes que la biblioteca. esto es un problema puesto que, al imprimir etiquetas para los carnets de usuario, unas veces aparece la BIBLIOTECA y despues la DESCRIPCION y en otras me aparece al revés... y todo es por culpa de ese trozo de código:

my $text = {
$patron_data->{'branchname'} => ($fontsize + 3),
$patron_data->{'description'} => $fontsize
};


puesto que los warns de antes tienen perfectamente el valor que toca...

alguien me podría ayudar, por favor??? yo ya no se que hacer....
  #2 (permalink)  
Antiguo 17/12/2008, 13:30
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Respuesta: Datos de un array

my $text = {
$patron_data->{'branchname'} => ($fontsize + 3),
$patron_data->{'description'} => $fontsize
};

Sabes lo que hace ese código ? está creando una variable escalar que tendrá como valor una referencia a una variable HASH...

Puedes ordenar fácilmente los keys de un hash de forma alfabética con sort keys %{$text}

Espero que te sirva...
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 25/12/2008, 16:12
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Respuesta: Datos de un array

Las claves/valores dentro de un hash se guardan en un orden "no conocido". Los hash sirven para recuperar un valor a partir de una clave.

Si quieres guardar información en un determinado orden, debes usar un arreglo.

Código:
my @text = (
    { $patron_data->{'branchname'}  => $fontsize+3 },
    { $patron_data->{'description'} => $fontsize   },
);

print $test[0]{investigador};
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:42.