Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как доступиться к элементу массива хешей? 
:(
    Опции темы
Aerodron
Дата 29.11.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.9.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



Добрый день!

Вот у меня есть код:
Код

sub BuildFilesPage
{
  my @files=();
  my $dbh = DBI->connect( "DBI:mysql:host=". $host .";database=". $database,
            $user, $password,
            { PrintError => 0, RaiseError => 1 } );

  my $sql = "SELECT filename, filesize FROM `filestorage_info`";

  my $sth = $dbh->prepare($sql);

  $sth->execute();
  while (my ($filename, $filesize) = $sth->fetchrow_array())
  {
    my %t1=();
    $t1{filename}=$filename;
    $t1{filesize}=$filesize;
    push @files,\%t1;
  }
  $sth->finish();
  $dbh->disconnect if defined($dbh);
  return @files;
}


Теперб, если я сделаю вот так:

Код

my @filelist = BuildFilesPage();


то как мне получившийся @filelist вывести на экран?

Писал

Код

my $size = @filelist;
for(my $i=0; $i<=$size; $i++)
{
  my %file = $filelist[$i];
  foreach my $key (keys %file)
  {
    print $key.": ".$file{$key};
  }
}


но интерпретатор пишет что 
Reference found where even-sized list expected
в строчке
my %file = $filelist[$i];

и
Use of uninitialized value in concatenation (.) or string
в строчке
print $key.": ".$file{$key};

Что это значит (кроме, конечно, ошибки в ДНК) ? smile))
 smile 

PM MAIL ICQ Jabber   Вверх
GoodBoy
Дата 29.11.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Код
print $key.": ".$file{$key};

замени на
Код
print $key.": ".$file->{$key};


Добавлено через 58 секунд
Код
my %file = $filelist[$i];

замени на
Код
my %file = %{$filelist[$i]};



--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Aerodron
Дата 29.11.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.9.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



Теперь в строчке
Код

print $key.": ".$file->{$key};

Пишет:
Can't use string ("ИМЯ_моего_скрипта") as a HASH ref while "strict refs" in use

Явшоке! Ужасть!
 smile

Добавлено @ 18:15
Может, форич заюзать? Но и с этим у меня бока:
Код

foreach my $file (@filelist)
{
  foreach my $k (keys my %file=$file)
  {
    my $value = $file{$k};
    print $k." = ". $value."\n";
  }
}


тож не пашет

Пишет что
Use of uninitialized value in concatenation (.) or string
в строчке
print $k." = ". $value."\n";
 и выдает нужное количество раз
Код

0 =


Это сообщение отредактировал(а) Aerodron - 29.11.2007, 18:20
PM MAIL ICQ Jabber   Вверх
Aerodron
Дата 29.11.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.9.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



Если я напишу:

Код

my $size = @filelist;
for(my $i=0; $i<=$size; $i++)
{
  my %file = %{$filelist[$i]};
  foreach my $key (keys %file)
  {
    print "\n".$key.": ".$file{$key};
  }
}


То работает, но последнюю строчку не выдает, а матюгается:

Код

filesize: 1234567
filename: qwerty
filesize: 21123123
filename: qwerty2
filesize: 21123123
filename: qwerty3
filesize: 21123123
Can't use an undefined value as a HASH reference at ./check_filestorage.pl line 195.


где Line 195 Это:
Код

my %file = %{$filelist[$i]};


вместо:
Код

filesize: 1234567
filename: qwerty
filesize: 21123123
filename: qwerty2
filesize: 21123123
filename: qwerty3
filesize: 21123123
filename: qwerty4

, что выдает запрос к базе

PM MAIL ICQ Jabber   Вверх
Aerodron
Дата 29.11.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 28.9.2007
Где: Украина, Днепропе тровск

Репутация: нет
Всего: 1



А, спасибо, вопрос тупой закрываю ))
Надо было писать:
Код

my $size = @filelist;
for(my $i=0; $i<$size; $i++)
{
  my %file = %{$filelist[$i]};
  foreach my $key (keys %file)
  {
    print "\n".$key.": ".$file{$key};
  }
}


Это сообщение отредактировал(а) Aerodron - 29.11.2007, 19:25
PM MAIL ICQ Jabber   Вверх
nitr
Дата 30.11.2007, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



а почему не работает такое?

Код

foreach (@filelist) {
    print 'Filename: '.$_->{filename}."\tSize: ".$_->{filesize}."\n";
}


а вот как пример...
Код

#!/usr/bin/perl
use warnings;
use strict;

my %f = ('1.txt', 154, '2.txt', 155, '3.txt', 156);
my @files1;

while (my ($filename, $filesize) = each %f) {
    push @files1, { 'filename' => $filename, 'filesize' => $filesize };
}

foreach (@files1) {
    print 'Filename: '.$_->{filename}."\tSize: ".$_->{filesize}."\n";
}



--------------------
PM   Вверх
tishaishii
Дата 30.11.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Код
$sth->fetchall_hashref(<ключевое поле для хэш-массива>)

Обычно, ключевое поле - это первичный ключ в массиве информации. Хотя бы уникальный.
Код
use DBI;

my$dbh=DBI->connect('dbi:ODBC:dsn=TEST', 'SYSDBA', 'masterkey');
my$sth=$dbh->prepare(<<'.');
SELECT * FROM BASES
.
$sth->execute;
my$rows=$sth->fetchall_hashref('ID_BASE');
($,,$\)=("\t", "\n");
print @{$rows->{$_}}{+keys %{$rows->{$_}}} foreach keys %$rows;
$sth->finish;
$dbh->disconnect;


Это сообщение отредактировал(а) tishaishii - 30.11.2007, 18:01
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.