Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » perl: древовидная структура подчинености

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте
 
подскажите как из этого
MihailVYa => AlexeyMSh
ValeriEG => IrinaAB
NinaPM => NataliVE
EugeneAL => IgorGT
IgorGT => VladimirAD
MihailVYa => VadimMA
IgorGT => IrinaUF
IgorGT => LubovNI
IgorGT => SergePO
IgorGT => AlexPA
NinaPM => TatianaAR
NinaPM => IrinaAM
NinaPM => ElenaNM
NinaPM => GalinaAK
MihailVYa => NinaPM
NinaPM => IrinaNB
EugeneMM => romanma
 
сделать это
 
MihailVYa
-AlexeyMSh
-NinaPM
--IrinaNB
--TatianaAR
--ElenaNM
--IrinaAM
--GalinaAK
-VadimMA
IgorGT
-IrinaUF
-LubovNI
 
заранее благодарен

Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 16:15 12-11-2014
pka

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Попробуйте так

Код:
#!perl
 
use strict;
use warnings;
 
my %persons;
 
#  Считываем строку из блока __DATA__
foreach my $str (<DATA>) {
  chomp $str;
  # Делим строку на босса и подчинённого
  my ($boss, $slave) = split(/ => /, $str);
   
  # Проверяем, определён ли массив боссов для подчинённого
  if (defined($persons{$slave}{'boss'}[0])) {
    # Если определён, то добавляем в конец массива босса
    push($persons{$slave}{'boss'}, $boss);
  } else {
    # Если не определён, то определяем массив, присваивая первое значение
    $persons{$slave}{'boss'}[0] = $boss;
  }
   
  # Проверяем, определён ли массив подчинённых для босса
  if (defined($persons{$boss}{'slave'}[0])) {
    # Если определён, то добавляем в конец массива подчинённого
    push($persons{$boss}{'slave'}, $slave);
  } else {
    # Если не определён, то определяем массив, присваивая первое значение
    $persons{$boss}{'slave'}[0] = $slave;
  }
}
 
# Печатаем всех боссов, которые не имеют боссов
foreach my $boss_without_boss (sort(keys(%persons))) {
  unless (defined($persons{$boss_without_boss}{'boss'}[0])) {
    print "$boss_without_boss\n";
    my $level = 0;
    # Вызываем подпрограмму печати всех подчинённых
    print_all_slaves($boss_without_boss, $level);
  }
}
 
# Подпрограмма печати всех подчинённых
sub print_all_slaves {
  my ($boss, $level) = @_;
  $level++;
  # Перебираем весь массив подчинённых
  foreach my $name (@{$persons{$boss}{'slave'}}) {
    # Печатаем подчинённого
    print '-' x $level;
    print "$name\n";
    # Рекурсивно вызываем подпрограмму печати всех подчинённых
    print_all_slaves($name, $level);
  }
}
 
__DATA__
MihailVYa => AlexeyMSh
ValeriEG => IrinaAB
NinaPM => NataliVE
EugeneAL => IgorGT
IgorGT => VladimirAD
MihailVYa => VadimMA
IgorGT => IrinaUF
IgorGT => LubovNI
IgorGT => SergePO
IgorGT => AlexPA
NinaPM => TatianaAR
NinaPM => IrinaAM
NinaPM => ElenaNM
NinaPM => GalinaAK
MihailVYa => NinaPM
NinaPM => IrinaNB
EugeneMM => romanma

Должно получиться
Код:
EugeneAL
-IgorGT
--VladimirAD
--IrinaUF
--LubovNI
--SergePO
--AlexPA
EugeneMM
-romanma
MihailVYa
-AlexeyMSh
-VadimMA
-NinaPM
--NataliVE
--TatianaAR
--IrinaAM
--ElenaNM
--GalinaAK
--IrinaNB
ValeriEG
-IrinaAB

Всего записей: 83 | Зарегистр. 16-03-2006 | Отправлено: 20:13 25-11-2014
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спсибо

Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 12:40 23-03-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » perl: древовидная структура подчинености


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru