Forum Webscript.Ru
Программирование => Perl => Тема начата: DamonLSD от 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: не будет предела!
-
затягивайте данные в хэш да и 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)
-
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, пиво то куда высылать? ;)
-
DamonLSD пива я не пью, фигуркой дорожу, знаете ли. ;)
мартини или коньяк. ;)
впрочем, насколько я поняла, моя помощь вам и непонадобилась.
с сортировкой-то.
-
AnnA, спасибо и за твое решение! Все получилось
@data = sort byID @data;
sub byID {
my $aa=(split(/\\|/,$b))[1];
my $ab=(split(/\\|/,$a))[1];
return ($ab <=> $aa)
}
print @data;
А вот как теперь вывести @data в нужном виде? Например:
Имя - Число
Имя - Число
а то ведь получается:
Имя|Число|
Имя|Число|
З.Ы. ТАК КУДА коньяк ОТПРАВЛЯТЬ? ;)
-
слушайте. нутк и забирайте в переменные сплитом данные из @data да и печатаейте как вам угодно.
foreach (@data) {
my($n,$d) = split(/\\|/);
print "$n - $d\\n
";
}
это ж элементарщина. издеваетесь что ль?
-
Почитайте эту тему сортировка (http://forums.webscript.ru/showthread.php?s=&threadid=17409&highlight=sort)
там есть один, очень хороший, линк для самообразования.
-
AnnA, vladsu, СПАСИБО!