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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помощь в отладке программы, хэши 
:(
    Опции темы
Gandhi
  Дата 21.2.2011, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.2.2011

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



Пытаюсь восстановить из книги перл 24 часа, копия мне досталась плохо распознали и теперь приходится мучаться..

Исходный текст программы Customer:

Код

#!/usr/bin/perl -w

open (PH, "customers.txt") or die "Ошибка при открытии customers.txt: $!\n";
while (<PH>) {
chomp;
($number, $email)=(split(/\s+/, $_))[1, 2];
$Email {'$email'}='$_';
$Phone {'$number'}='$_';
}
close(PH);

print "Для выхода из программы введите 'q'\n"; 
while (1) {
print "\nНомер?";
$number=<STDIN>; chomp($number);
$address="";
if (! $number ) {
print "Email?";
$address=<STDIN>; chomp($address);
}
}
next if (! $number and ! $address);
last if ($number eq 'q' or $address eq 'q');

if ($number and exists $Phone{number} ) {
print "Заказчик: $Phone{$number}\n";
next;
}

if ($address and exists $Email{$address})  {
print "Заказчик: $Email{$address}\n";
next;
} {
print "Заказчик не найден.\n";
next;
}
print "\nПрограмма завершена.\n";


также содержимое файла customer.txt

Smith,John    (248)-555-9430 [email protected]
Hunter,Apryl    (810)-555-3029 [email protected]
Stewart,Pat    (405}-555-8710 [email protected]
Ching,Iris    (305)-555-0919 [email protected]
Doe,John    (212)-555-0912 [email protected]
Jones,Tom    (312)-555-3321 [email protected]
Smith,John    (607)-555-0023 [email protected]
Crosby,Dave    (405)-555-1516 [email protected]
Johns,Pan    (313J-555-6790 [email protected]
Jeter,Linda    (810)-555-8761 [email protected]
Garland,Judy    (305)-555-1231 [email protected]


и Вот как должно работать:
Код

Для выхода нз программы введите ' q '
Номер? <Enter>
E-Mail? [email protected]
Заказчик: Crosby, Dave (405)-555-1516 [email protected]

Номер? (305)-555-0919
Заказчик: Ching, Iris (305)-555-0919  [email protected]

Номер? q

Программа завершена.




у меня не работает.. не пойму где что не так, выдает что на 6 строке.. не ясно :(

PM MAIL   Вверх
Jimy
Дата 22.2.2011, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

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



в строках 7,8 одинарные кавычки явно лишние.
PM   Вверх
Gandhi
Дата 22.2.2011, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.2.2011

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



пробовал их убрать, вот что выходит:

Код

Use of uninitialized value $email in hash element at customer line 7, <PH> line 12.
Use of uninitialized value $number in hash element at customer line 8, <PH> line 12.



когда пытаюсь ввести чей то номер для поиска или email то ничего не происходит! а 
Код

q


тоже не работает
PM MAIL   Вверх
alezzz
Дата 23.2.2011, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

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



Цитата(Gandhi @  22.2.2011,  21:03 Найти цитируемый пост)
Use of uninitialized value $email in hash element at customer line 7, <PH> line 12.

не получает $email и $phone тут: 
Код

($number, $email)=(split(/\s+/, $_))[1, 2];

проверяйте customers.txt
Цитата(Gandhi @  22.2.2011,  21:03 Найти цитируемый пост)
когда пытаюсь ввести чей то номер для поиска или email то ничего не происходит! 

где-то лишняя "}", next и last стоят за циклом while.
PM MAIL   Вверх
Gandhi
Дата 24.2.2011, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.2.2011

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



Код

#!/usr/bin/perl -w

open (PH, "customers.txt") or die "Ошибка при открытии customers.txt: $!\n";
while(<PH>) {
chomp; 
($number, $email)=(split(/\s+/, $_))[1, 2];
$Email {$email}=$_;
$Phone {$number}=$_;
}
close(PH);

print "Для выхода из программы введите 'q'\n"; 
while (1) {
print "\nНомер?";
$number=<STDIN>; chomp($number);
$address="";
if (! $number ) {
print "Email?";
$address=<STDIN>; chomp($address);
}

next if (! $number and ! $address);
last if ($number eq 'q' or $address eq 'q');

if ($number and exists $Phone{number} ) {
print "Заказчик: $Phone{$number}\n";
next;
}

if ($address and exists $Email{$address})  {
print "Заказчик: $Email{$address}\n";
next;
}
print "Заказчик не найден.\n";
next;
}
print "\nПрограмма завершена.\n";



фигурные скобки переставил, теперь программа завершается при нажатии на q, но по прежнему не может осуществить поиск

Код

Use of uninitialized value $email in hash element at customer line 7, <PH> line 12.

Use of uninitialized value $number in hash element at customer line 8, <PH> line 12.

PM MAIL   Вверх
alezzz
Дата 24.2.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

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



Последняя строка в customers.txt пустая, ничего страшного, проблема не в этом. Проблема в буферизации вывода:
Код

#!/usr/bin/perl -w
$| = 1;
open (PH, "customers.txt") or die "Ошибка при открытии customers.txt: $!\n";
...
и т.д.


и ошибка в 25 строке:
Код

if ($number and exists $Phone{$number} ) {



Это сообщение отредактировал(а) alezzz - 24.2.2011, 10:32
PM MAIL   Вверх
Gandhi
Дата 24.2.2011, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.2.2011

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



Код

#!/usr/bin/perl -w
$| = 1;
open (PH, "customers.txt") or die "Ошибка при открытии customers.txt: $!\n";
while(<PH>) {
chomp; 
($number, $email)=(split(/\s+/, $_))[1, 2];
$Email {$email}=$_;
$Phone {$number}=$_;
}
close(PH);
print "Для выхода из программы введите 'q'\n"; 
while (1) {
print "\nНомер?";
$number=<STDIN>; chomp($number);
$address="";
if (! $number ) {
print "Email?";
$address=<STDIN>; chomp($address);
}
next if (! $number and ! $address);
last if ($number eq 'q' or $address eq 'q');
if ($number and exists $Phone{number} ) {
print "Заказчик: $Phone{$number}\n";
next;
}
if ($address and exists $Email{$address})  {
print "Заказчик: $Email{$address}\n";
next;
}
print "Заказчик не найден.\n";
next;
}
print "\nПрограмма завершена.\n";


исправил так, но всеравно не работает
PM MAIL   Вверх
alezzz
Дата 24.2.2011, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

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



что именно не работает? я попробовал запустить, все работает

Это сообщение отредактировал(а) alezzz - 24.2.2011, 22:47
PM MAIL   Вверх
Gandhi
Дата 26.2.2011, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.2.2011

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



когда пробую поиск по номеру или email то пишет заказчик не найден
 
при запросе номера например набираю:
Код

(248)-555-9430


а почты:
Код

[email protected]


и заказчик не найден

а у вас как работает?
PM MAIL   Вверх
alezzz
Дата 26.2.2011, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

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



работает:
Цитата

Для выхода из программы введите 'q'

Номер?(248)-555-9430
Заказчик: Smith,John    (248)-555-9430 [email protected]

Номер[email protected]
Заказчик не найден.

Номер?1212
Заказчик не найден.

Номер?
Email?ertyrty
Заказчик не найден.

Номер?
Email?

Номер?q

Программа завершена.

Вот ваша программа:
Код

#!/usr/bin/perl -w
$| = 1;
open (PH, "customers.txt") or die "Ошибка при открытии customers.txt: $!\n";
while(<PH>) {
    chomp;
    ($number, $email)=(split(/\s+/, $_))[1, 2];
    $Email {$email}=$_;
    $Phone {$number}=$_;
}
close(PH);
print "Для выхода из программы введите 'q'\n";
while (1) {
    print "\nНомер?";
    $number=<STDIN>; chomp($number);
    $address="";
    if (! $number ) {
        print "Email?";
        $address=<STDIN>; chomp($address);
    }
    next if (! $number and ! $address);
    last if ($number eq 'q' or $address eq 'q');
    if ($number and exists $Phone{$number} ) {
        print "Заказчик: $Phone{$number}\n";
        next;
    }
    if ($address and exists $Email{$address})  {
        print "Заказчик: $Email{$address}\n";
        next;
    }
    print "Заказчик не найден.\n";
    next;
}
print "\nПрограмма завершена.\n";


PM MAIL   Вверх
Gandhi
Дата 26.2.2011, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.2.2011

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



 smile  всеравно никак...

в таком случае может быть я неверно сделал txt файл?

я создал файл с расширением txt  и названием customers:

Smith,John (248)-555-9430 [email protected]

Hunter,Apryl (810)-555-3029 [email protected]

Stewart,Pat (405}-555-8710 [email protected]

Ching,Iris (305)-555-0919 [email protected]

Doe,John (212)-555-0912 [email protected]

Jones,Tom (312)-555-3321 [email protected]

Smith,John (607)-555-0023 [email protected]

Crosby,Dave (405)-555-1516 [email protected]

Johns,Pan (313J-555-6790 [email protected]

Jeter,Linda (810)-555-8761 [email protected]

Garland,Judy (305)-555-1231 [email protected]

верно?

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


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

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


 




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


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

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