• Publicidad

Problema con CAM::DBF

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Problema con CAM::DBF

Notapor jc.morataya » 2008-02-28 23:40 @027

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#Return a record as a reference to an array of fields.
#Row numbers count from zero.
my $recordtoarray = $dbf->fetchrow_arrayref(0);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


también esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#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);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


me da
Código: Seleccionar todo
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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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";
         

}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
jc.morataya
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-02-28 09:30 @438

Publicidad

Notapor explorer » 2008-02-29 06:33 @314

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $recordtoarray = $dbf->fetchrow_arrayref(0);
foreach my $field ( @{$recordtoarray} ) {
    print "$field\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print $recordtoarray->[2], "\n"; # pinta el tercer campo del array
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En el caso de ser una referencia a un hash
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $recordtohash = $dbf->fetchrow_hashref(0);
foreach my $field ( keys %{$recordtohash} ) {
    print "$field => $recordtohash->{$field}\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


E igual que antes, puedes referirte a un entrada del hash, si sabes la clave:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "$recordtohash->{name}\n"; # pinta el contenido del campo 'name' del registro
Coloreado en 0.001 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


Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron