![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
tooncheg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
Необходимо было изучить perl. Первоначально прочитал Рендала Шварца 5 издание и решил для тренировке создать тел. справочник. Создан файл текстовый БД вида:
Сидоров Самуил Виторганович::5533::113::Бухгалтерия Петров Лев Игнатьевич::5322::114::Кадров Иванов Иван Иванович::5322::119::56 Параметры предполагалось заводить через веб форму
Задавал вопросы на схожем форуме, но в итоге все пришло к полной неразберихе. Вообщем если начать с чистого листа. Можете ли дать советы как может быть реализован поиск по БД. |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
читать и сравнивать.
|
|||
|
||||
tooncheg |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
В том и дело алгоритм сравнения меня и ввел в тупик. Вот например:
это кусок чернового варианта. что тут получается, если равны левые и правая часть, то условие выполнится, а если я в форме ввел только номер телефона, то условие не должно выполняться (на самом деле у меня происходит поиск, по одному параметру из формы, но выводится только первое совпадение из БД). Именно так как вы предложили я и пытался решить задачу, но алгоритм сравнения оказался не так прост для меня. |
||||
|
|||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
а как надо? если не введен параметр, то как надо поступать?
|
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
Если задание отсюда https://www.reg.ru/company/jobs/testtask-prog
то там надо написать используя Catalyst, а не просто голый perl. |
|||
|
||||
tooncheg |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
Я читал строки так
далее как тут советовали сравнивать. но вот тут как раз то и становится не ясно как это осуществить.
Операция поиска совпадения по шаблону в левой части - допустим true. Операция поиска совпадения по шаблону в правой части, параметр в форме не был введен - false. Условие же не выполнится. Или я недопонимаю что-то. Я не знаю как надо поступать. Прочитать строки и сравнить, если это можно реализовать, то как это сделать. |
||||||
|
|||||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
прочитать поля в хеш (для удобства), затем
map { $_ => exists $hash{$_} && param($_) eq $hash{$_} } param() получите хеш результатов сравнений существующих параметров (вместо eq можно взять регекс). далее обрабатываете как вам удобно (предполагается, что param() -- функция из CGI* модулей). А еще проще -- использовать какой-либо из валидаторов, типа Data::FormValidator |
|||
|
||||
tooncheg |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
У меня есть пару вопросов по поводу как занести данные в хэш . я изменил текстовую БД 1::Сидоров::Самуил::Виторганович::5533::113::Бухгалтерия 2::Петров::Лев::Игнатьевич::5322::114::Кадров 3::Иванов::Иван::Иванович::5322::119::56 потом читаю строки так
Но в результате хэш заполняется только последней строкой, т.е. в хэше содержится только последняя строка 3::Иванов::Иван::Иванович::5322::119::56 И вообще правильно ли я Вас понял, как надо прочитать поля в хэш? |
||||
|
|||||
alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
|
|||
|
||||
tooncheg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
Я извиняюсь. Просто потратил кучу времени, а справочник создать не получается даже после совета arto.
Как реализовать сравнение введенного из формы и записанного в ХЭШ, и записанного в ХЭШ из текстового файла. Например, если в форме вводились данные номер телефона и фамилия с кем связан этот телефон, то выводились данные конкретного человека. Заранее спасибо. |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
map { ( $form{$_} || "" ) eq ( $file{$_} || "" ) } keys %form
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
tooncheg, напишите, как Вы представляете поиск, т.е. что вводится в поля и что должно быть выведено в качестве результата поиска (нужны примеры).
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
tooncheg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
Самая простая форма. 6-ть полей куда вносятся данные для поиска Имя,Фамилия,Отчество,Отдел,Комната,Телефон. <html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <head><title>ФОРМА</title></head> <body> <h2>Заполните форму для поиска</h2> <br> <form method="get" action="http://site.ru/perl/form_temp.pl"> <pre> Введите имя: <input type="text" name="name"> Введите фамилию: <input type="text" name="surname"> Введите отчество: <input type="text" name="patronymic"> Введите отдел: <input type="text" name="department"> Введите комнату: <input type="text" name="room"> Введите телефон: <input type="text" name="phone"> <input type=submit value=Поиск> </form> <body> <html> Данные передаются в скрипт form_temp.pl , модуль CGI помогает принять значения. В поля вводятся либо остаются пустыми ИМЯ ФАМИЛИЯ ОТЧЕСТВО ОТДЕЛ КОМНАТА ТЕЛЕФОН. Например ввод ИМЕНИ ТЕЛЕФОНА ОТДЕЛА далее сравнение по текстовой БД и вывод ФАМИЛИИ ИМЕНИ ОТЧЕСТВА ТЕЛЕФОНА...я представляю это типа выборки по введенным параметрам, но как сделать не знаю. |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
tooncheg, вот мой вариант без CGI и для текста в кодировке cp1251:
Это сообщение отредактировал(а) ginnie - 28.5.2013, 17:19 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
tooncheg |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 20.5.2013 Репутация: нет Всего: нет |
ginnie
Мне не очень понятны несколько строк
$person если его вывести на экран, то это будут ссылки на то где хранится в памяти хэш. Что в реальности происходит тут? Еще не понял для чего нужен еще {number}.
Что происходит тут? Прошу отнестись снисходительно, т.к. я только учусь. Заранее спасибо. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |