Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Problema con CAM::DBF

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos
Mensaje Jue Feb 28, 2008 10:40 pm
jc.morataya
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Feb 2008
Mensajes: 7
Problema con CAM::DBF Responder citando

Hola!

Recién instalé el CAM::DBF para probarlo. He hecho un script con todos los "Instance Methods"; algunos van bien pero otros me dan resultados extraños como: ARRAY(0x100a26dc) lo da esta instrucción:

Perl:
#Return a record as a reference to an array of fields.
#Row numbers count from zero.
my $recordtoarray = $dbf->fetchrow_arrayref(0);


también esta:
Perl:
#Return a record as a reference to a hash of (field name = field value)> pairs. Row numbers count from zero.
my $recordtohash = $dbf->fetchrow_hashref(0);


me da
Código:
HASH(0x100895f0);


Hasta donde sé, deberían aparecer los campos de la BD, ¿no es así?

¿Me pueden ayudar con este tema? ¿Qué hago para extraer los datos de la de BD?

Saludos y gracias ¿eh?

JC

Por si vale de algo les copio abajo el script tal cual lo ejecuto:

Perl:
#!/usr/bin/perl -w

use CAM::DBF;

# abre la DBF en el modo de lectura
my $dbf = CAM::DBF->new("test.dbf", 'r');


#Return the number of columns in the data table.
my $fields = $dbf->nfields();

#Return a list of field header names.
my $names = $dbf->fieldnames();

#Return a record as a reference to an array of fields.
#Row numbers count from zero.
my $recordtoarray = $dbf->fetchrow_arrayref(0);

#Return a record as a reference to a hash of (field name = field value)> pairs.
#Row numbers count from zero.
my $recordtohash = $dbf->fetchrow_hashref(0);

my $arrayref = $dbf->fetchrows_arrayref(1, 6);

print "$dbf\n";

for ($i = 0; $i <= 5; $i++) {
        #Return a the title of the specified column. $i
        # can be a column name or number.
    #Column numbers count from zero.
        my $nameofthecolumns = $dbf->fieldname($i);
       
        #Return the dBASE field type for the specified column.
        #$i can be a column name or number. Column numbers
        #count from zero.
    my $fieldtype = $dbf->fieldtype($i);
   
    #Return the byte width for the specified column. $i
    #can be a column name or number.
    #Column numbers count from zero.   
    my $bytewidth = $dbf->fieldlength($i);
   
        #print "Field $i is called: $nameofthecolumns the type is: ".
    #     "$fieldtype and his byte width is $bytewidth\n";
         

}
Mensaje Vie Feb 29, 2008 5:33 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4130
Ubicación: Valladolid, España
Responder citando

Sí, yo creo que está funcionando bien.

Por ejemplo, según la documentación del módulo, lo que devuelve fetchrow_arrayref($numrow) es una referencia a un array en la que los elementos son los campos del registro de la base de datos número $numrow. Y eso es justo lo que te devuelve: ARRAY(0x100a26dc). Para ver el contenido de esa referencia, debes desreferenciarla:

Perl:
my $recordtoarray = $dbf->fetchrow_arrayref(0);
foreach my $field ( @{$recordtoarray} ) {
    print "$field\n";
}

Fíjate que estamos indicando que lo que nos está devolviendo $recordtoarray es un array, no un escalar. Por eso luego podemos hace un bucle por todos sus elementos.

También puedes referirte a uno de esos elementos de la misma forma que se hace en C:
Perl:
print $recordtoarray->[2], "\n"; # pinta el tercer campo del array


En el caso de ser una referencia a un hash
Perl:
my $recordtohash = $dbf->fetchrow_hashref(0);
foreach my $field ( keys %{$recordtohash} ) {
    print "$field => $recordtohash->{$field}\n";
}


E igual que antes, puedes referirte a un entrada del hash, si sabes la clave:
Perl:
print "$recordtohash->{name}\n"; # pinta el contenido del campo 'name' del registro
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group