Forum Webscript.Ru

Программирование => Perl => Тема начата: glebushka от 12 Марта 2002, 18:13:01

Название: чортировать по алфавиту
Отправлено: 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);
Название: хы
Отправлено: Green Kakadu от 12 Марта 2002, 20:07:03
читай FAQ, составленный Chs
Если под нужно лишь Win, то хватает просто use locale;

:) perldoc -Сhs faq :super:
Название: чортировать по алфавиту
Отправлено: puh от 12 Марта 2002, 20:16:07
Цитировать
Это по-моему #проверяет на повторения

Нет, дорогой, это сравнивает с теми самыми junk. По моему этот скрипт с сортировкой не имеет ничего общего.
Учи регулярные выражения ;)
Название: чортировать по алфавиту
Отправлено: Green Kakadu от 12 Марта 2002, 20:16:21
Цитировать
{#Это по-моему #проверяет на повторения...

то что ты запостил к проблеме отношения не имеет
открывает один файл ,сверяет его данные с заданными строками и кидает в другой файл эти же записи, а если они совпадают  то грязно ругается.
Название: чортировать по алфавиту
Отправлено: glebushka от 12 Марта 2002, 20:30:42
Цитировать
Если под нужно лишь Win, то хватает просто use locale;

Нужно Unix!
Цитировать
Учи регулярные выражения

Учу, как могу, а толком объяснить не можешь?
Цитировать
то что ты запостил к проблеме отношения не имеет

Ну может кто кинет тогда ссылку на скрипт?
Название: чортировать по алфавиту
Отправлено: glebushka от 12 Марта 2002, 22:41:54
Цитировать
use locale;

Извиняюсь, ступил):
Да кодировка win.
Название: сортировка
Отправлено: Wyclef от 12 Марта 2002, 23:01:35
use locale;

#текстовый файл со словами по одному в строке
open(FILE, "file.txt");
@words = ;
close(FILE);

@sorted = sort { $a cmp $b } @words;
Название: чортировать по алфавиту
Отправлено: glebushka от 12 Марта 2002, 23:19:54
Всем спасибо!!!
Вроде что-то получилось:)
#!/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 }

Что это значит?
Название: чортировать по алфавиту
Отправлено: Wyclef от 12 Марта 2002, 23:47:05
@sortedlist = sort { $a cmp $b } @somelist;

Что это значит:

$a, $b - служебные переменные
cmp, <=> - операторы сортировки
{ $a cmp $b } - критерий сортировки

массив @somelist сортируется как строки в алфавитном порядке (т.к.  cmp), от меньшего элемента к большему (т.к. { $a cmp $b }) и записывается в @sortedlist

если нужно сортировать числа, то вместо cmp ставишь <=>

если нужно сортировать от большего в меньшему - меняешь местами $b и $a
Название: чортировать по алфавиту
Отправлено: glebushka от 14 Марта 2002, 01:50:05
Угу, понятно,
Wyclef
спасибо за подробное объяснение
Чудо свершилось:) - до меня дошло!