![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Добрый день!
Есть следующая матрица в файле File.txt: A B C D Иванов 3 6 6 Петров 5 7 7 Дурнов 2 3 3 3 Кошкин 8 1 1 Верхняя строка представляет собой название АТРИБУТА. Левый столбец обозначает человека. Все данные разделены табами. В начале первой строки тоже стоит таб. Необходимо создать структуру вида: $hash{Иванов}{A}=3 $hash{Иванов}{B}=6 $hash{Иванов}{С}=6 $hash{Иванов}{D}=99 // на пересечении Иванов и D нет никакого значения, в таких случаях присваиваем 99 $hash{Петров}{A}=5 $hash{Петров}{B}=99 $hash{Петров}{С}=7 $hash{Петров}{D}=7 $hash{Дурнов}{A}=2 $hash{Дурнов}{B}=3 $hash{Дурнов}{C}=3 $hash{Дурнов}{D}=3 $hash{Кошкин}{A}=8 $hash{Кошкин}{B}=99 $hash{Кошкин}{C}=1 $hash{Кошкин}{D}=1 Заранее спасибо решившему! |
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Эту задачу решил следующим кодом:
Добавлено через 33 секунды Только 99 не получилось присваивать с случае с пустым значением. |
|||
|
||||
ming |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 30.1.2009 Где: Новосибирск Репутация: 2 Всего: 3 |
||||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perl -lne 'if (m#^\s+#) { (undef,@a) = split "\t" } else { my ($n,@b) = split "\t"; my %h; @h{@a} = map { $_ || 99 } @b; $hash{ $n } = \%h; }'
|
|||
|
||||
Suppir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
arto, можете пояснить, как работает
@h{@a} и $hash{ $n } = \%h ? |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
1. perldoc perldata на предмет slice
2. perldoc perlref |
|||
|
||||
ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
что бы понять что пишет arto надо уметь пользоваться Deparse, хотя может и не помочь ![]() -------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Это сообщение отредактировал(а) tishaishii - 27.10.2010, 23:01 |
|||
|
||||
Sugar84 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.5.2010 Репутация: нет Всего: нет |
В случае нуля на 99 заменится же, разве не? |
||||
|
|||||
ming |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 30.1.2009 Где: Новосибирск Репутация: 2 Всего: 3 |
||||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: 4 Всего: 8 |
Замечательно.
Это сообщение отредактировал(а) tishaishii - 29.10.2010, 22:44 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |