Forum Webscript.Ru
Программирование => Perl => Тема начата: glebushka от 12 Марта 2002, 18:13:01
-
Такая проблемка: есть тхт файл, там список слов, необходимо сортировать по алфавиту (русский алфавит), а то смотрю в чужой код вижу большую фигу, а у меня чего-то слишком большой код получается, наверняка можно гораздо проще.
Комментариев побольше плиз, мне надо ОБЯЗАТЕЛЬНО понять весь код, т.к. скрипт у меня гораздо сложнее, и я код буду встраивать в мой скрипт!
Я нашёл вроде скрипт, который делает по-моему тоже самое:).
ПОМОГИТЕ РАЗОБРАТЬ, т.е. снабдите комментариями плиз, каждую строчку:
open(F1,$outfile);
open(F2,">$final");
$oldf1 = "junk"; #Это что такое? Что за junk, откуда?
$oldf2 = "junks";
while ($line = ) {
($f1,$f2,$dummy) = split(/\\s*\\,\\s*/,$line,3);#ЭТО особенно #подробно,как ребёнку!!!ПЛИИИИИИИЗ!
if (($f1 eq $oldf1) && ($f2 eq $oldf2)) {#Это по-моему #проверяет на повторения...
print "Found duplicate : $f1, $f2\\n";
} else {
print F2 "$line";
$oldf1 = $f1;
$oldf2 = $f2;
}
}
close(F1);
close(F2);
-
читай FAQ, составленный Chs
Если под нужно лишь Win, то хватает просто use locale;
:) perldoc -Сhs faq :super:
-
Это по-моему #проверяет на повторения
Нет, дорогой, это сравнивает с теми самыми junk. По моему этот скрипт с сортировкой не имеет ничего общего.
Учи регулярные выражения ;)
-
{#Это по-моему #проверяет на повторения...
то что ты запостил к проблеме отношения не имеет
открывает один файл ,сверяет его данные с заданными строками и кидает в другой файл эти же записи, а если они совпадают то грязно ругается.
-
Если под нужно лишь Win, то хватает просто use locale;
Нужно Unix!
Учи регулярные выражения
Учу, как могу, а толком объяснить не можешь?
то что ты запостил к проблеме отношения не имеет
Ну может кто кинет тогда ссылку на скрипт?
-
use locale;
Извиняюсь, ступил):
Да кодировка win.
-
use locale;
#текстовый файл со словами по одному в строке
open(FILE, "file.txt");
@words = ;
close(FILE);
@sorted = sort { $a cmp $b } @words;
-
Всем спасибо!!!
Вроде что-то получилось:)
#!/usr/bin/perl
$gb_path="/home/g/glebushka.hut.ru/WWW/od.dat";
use locale;
open(GB_DAT,"$gb_path");
@somelist = ;
@sortedlist = sort @somelist;
close(GB_DAT);
print "@sortedlist";
Wyclef
{ $a cmp $b }
Что это значит?
-
@sortedlist = sort { $a cmp $b } @somelist;
Что это значит:
$a, $b - служебные переменные
cmp, <=> - операторы сортировки
{ $a cmp $b } - критерий сортировки
массив @somelist сортируется как строки в алфавитном порядке (т.к. cmp), от меньшего элемента к большему (т.к. { $a cmp $b }) и записывается в @sortedlist
если нужно сортировать числа, то вместо cmp ставишь <=>
если нужно сортировать от большего в меньшему - меняешь местами $b и $a
-
Угу, понятно,
Wyclef
спасибо за подробное объяснение
Чудо свершилось:) - до меня дошло!