![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
У меня есть массив из следующих строк:
4089149.1000 - рекомендациями 4089149 - письме 4089149 - Письмо 23841197.3 - Законом 23939435.1 - прилагаемому перечню 23962142.112 - Реестр 23962142.112 - Комиссии 10800200.2043 - уплачивают 10800200.28903 - представляют 10800200.3452 - представляют 10800200.90 - статья 90 10800200.12801 - пунктом 1 статьи 128 10800200.12802 - пункту 2 статьи 128 10800200.10104 - статьи 101.4 10800200.99 - статьи 99 10800200.97 - статьей 97 12054265.3000 - форме 10800200.90 - статьи 90 10800200.90 - статьи 90 10800200.90 - статьи 90 10800200.145 - статьей 145 12053802.11 - Законом 10800200.145 - статьи 145 10800200.145 - статьей 145 10800200.1456 - пунктом 6 статьи 145 10800200.145 - статьи 145 10800200.1451 - пунктом 1 статьи 145 10800200.145 - статьи 145 10800200.145 - статьей 145 10800200.145 - статьей 145 10800200.145 - статьей 145 23939271.6 - приложения N 6 23939271.6 - приложения N 6 23939271.6 - приложения N 6 23939271.6 - приложения N 6 23939271.6 - приложения N 6 23939271.6 - приложения N 6 23939271.6 - приложения 23875307.17 - Правилами 10005643.6 - статьей 6 Т.е. в массиве как бы заключены пары "номер - значение". Как видите, номера часто повторяются и у одинаковых номеров одинаковые значения. Например, номеру "23939271.6" почти всегда соответствует значение "приложения N 6". Необходимо для каждого номера, который повторяется более 3 раз вывести: 1) наболее характерное значение 2) исключения Например, для номера "23939271.6" характерным является значение "приложения N 6", а исключением "приложения". |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
Лабораторная работа ?
|
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Нет, просто работа. Только у меня голова не работает
Это сообщение отредактировал(а) Suppir - 10.2.2010, 15:01 |
|||
|
||||
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
Вот приблизительный алгоритм:
1. Делаем цикл по списку 2. Каждую строку разбиваем на ключ-значение 3. Кладем их в хеш следующей структурой
4. Дальше осталось пройти по все ключам хеша вывести нужные данные. В хеше будет статистика по кол. значений для каждого ключа. Suppir, пиши код сюда. Если что не понятно спрашивай --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Массивы хешей и хеши массивов выносят мне голову
С помощью регулярного выражения мы получаем $1 и $2; Не знаю как написать на Perl следующее условие: Если в хеше $a нет ключа $2, то заносим ключ $2 в хеш, и заносим к нему значение $1 Если в хеше $a есть ключ $2, то в его значения добавляем значение $1 (т.е. создается массив в значениях) |
|||
|
||||
| fanat1k |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 17.11.2006 Репутация: нет Всего: нет |
Если правильно понял, то надо сделать так, чтобы ключом хеша $a был массив (ссылка на массив) из переменных $1, тогда можно вот так:
push @{ $h->{$2}}, $1 Условие проверять даже не надо. В случае если ключа нету - он создастся и будет указывать на массив из одного элемента, если ключ есть, то к массиву добавиться еще один элемент. |
|||
|
||||
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
Вот разбор списка. А дальше попробуй сам.
Дальше тебе надо пройтись по полученному хешу и выбрать нужные значения. Код писал прямо сюда. Так что возможны ошибки.
--------------------
http://isokolov.blogspot.com/ |
|||
|
||||
| RomanCh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 23.8.2009 Репутация: нет Всего: нет |
Позвольте внести небольшие поправочки.
1. Регулярки обрезающие пробельные символы в начале/конце строки в коде Vaneska ничего не делали (вероятно забыт s/). Кроме того - вместо 2х можно использовать одну. chomp $line тоже излишен. 2. Можно использовать "самооживление" ссылок на хеш без проверки их существования и создания ссылки на пустой хеш.
Это сообщение отредактировал(а) RomanCh - 16.2.2010, 02:05 |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |