Автор Тема: Избитая тема - сортировка  (Прочитано 4499 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Избитая тема - сортировка
« : 26 Октября 2005, 10:18:06 »
Будь здрав, О всезнающий All.
Прошу не пинать ногами и не отсылать на perldoc sort :( ибо задал я поиск по форуму, почитал темы, нашел одну аналогичную http://forums.webscript.ru/showthread.php?threadid=6150&highlight=%F1%EE%F0%F2%E8%F0%EE%E2%EA%E0
но не помогло!
Суть такова: имеется файлик со строками. Строка разделена символом "|" и содержит два поля, например, Имя и цифровое значение:
Name1|123|
Name2|4.04|
NameA|35.5|
...

Необходимо отсортировать содержимое этого файла по второму полю и вывести на экран следующее:
Name1|123|
NameA|35.5|
Name2|4.04|
...

ПОМОГИТЕ пжлста горе-"программеру" :)
и благорности моей :beer: не будет предела!
Good Luck,
   Damon LSD.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Избитая тема - сортировка
« Ответ #1 : 26 Октября 2005, 12:05:30 »
затягивайте данные в хэш да и foreach (sort values %hash)
если нужен массив:
@data = sort byID @data;

sub byID  {
 my $aa=(split(/\\|/,$b))[1];
 my $ab=(split(/\\|/,$a))[1];
 return ($ab <=> $aa)
}
если хочется сортировать не цифры, то надо заменить строку
 return ($ab cmp $aa)
пока-пока. :)

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Избитая тема - сортировка
« Ответ #2 : 26 Октября 2005, 13:40:05 »
AnnA, спасибо! Сейчас обязательно попробую :)
И я нашел решение из темы http://forums.webscript.ru/showthread.php?s=&threadid=11493&highlight=%F1%EE%F0%F2%E8%F0%EE%E2%EA%E0 обошелся вот этим куском кода:
open (FILE, "<$datfile") or die("Can\'t open $file-file ",$!);
my @lines=;
close(FILE);

my $i=0;
@lines=sort{(split /\\|/,$b)[1] <=> (split /\\|/,$a)[1]}@lines;

foreach (@lines)
{
$i++;
my($name1,$name2,$name3)=split(/\\|/, $_);
print "$name1 - $name2 $name3";
}

Результат вышел:
Name1 - 123
NameA - 35.5
Name2 - 4.04
что и нужно было :)

З.Ы. AnnA, пиво то куда высылать? ;)
Good Luck,
   Damon LSD.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Избитая тема - сортировка
« Ответ #3 : 26 Октября 2005, 14:45:16 »
DamonLSD пива я не пью, фигуркой дорожу, знаете ли. ;)
мартини или коньяк. ;)
впрочем, насколько я поняла, моя помощь вам и непонадобилась.
с сортировкой-то.
пока-пока. :)

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Избитая тема - сортировка
« Ответ #4 : 26 Октября 2005, 14:51:46 »
AnnA, спасибо и за твое решение! Все получилось

@data = sort byID @data;

sub byID  {
my $aa=(split(/\\|/,$b))[1];
my $ab=(split(/\\|/,$a))[1];
return ($ab <=> $aa)
}

print @data;

А вот как теперь вывести @data в нужном виде? Например:
Имя - Число
Имя - Число

а то ведь получается:
Имя|Число|
Имя|Число|


З.Ы. ТАК КУДА коньяк ОТПРАВЛЯТЬ? ;)
Good Luck,
   Damon LSD.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Избитая тема - сортировка
« Ответ #5 : 26 Октября 2005, 15:28:26 »
слушайте. нутк и забирайте в переменные сплитом данные из @data да и печатаейте как вам угодно.
foreach (@data) {
my($n,$d)  = split(/\\|/);
print "$n - $d\\n
";
}
это ж элементарщина. издеваетесь что ль?
пока-пока. :)

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Избитая тема - сортировка
« Ответ #6 : 26 Октября 2005, 15:37:36 »
Почитайте эту тему сортировка
там есть один, очень хороший, линк для самообразования.
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Избитая тема - сортировка
« Ответ #7 : 26 Октября 2005, 15:46:16 »
AnnA, vladsu, СПАСИБО!
Good Luck,
   Damon LSD.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28