Jue Feb 28, 2008 10:40 pm
|
 |
jc.morataya
Perlero Nuevo

|
Registrado: 28 Feb 2008
Mensajes: 7
|
|
| Problema con CAM::DBF |
|
|
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";
} |
|
|
|
|

Vie Feb 29, 2008 5:33 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
|
|
|
|
|
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
|
|
|

Powered by phpBB © 2001, 2005 phpBB Group
|