Автор Тема: чортировать по алфавиту  (Прочитано 3934 раз)

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

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
чортировать по алфавиту
« : 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

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
хы
« Ответ #1 : 12 Марта 2002, 20:07:03 »
читай FAQ, составленный Chs
Если под нужно лишь Win, то хватает просто use locale;

:) perldoc -Сhs faq :super:
 в исканиях.

Оффлайн puh

  • Ни свой, ни чужой
  • Старожил
  • ****
  • Сообщений: 300
  • +0/-0
  • 2
    • Просмотр профиля
чортировать по алфавиту
« Ответ #2 : 12 Марта 2002, 20:16:07 »
Цитировать
Это по-моему #проверяет на повторения

Нет, дорогой, это сравнивает с теми самыми junk. По моему этот скрипт с сортировкой не имеет ничего общего.
Учи регулярные выражения ;)
© Винни-Пух

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
чортировать по алфавиту
« Ответ #3 : 12 Марта 2002, 20:16:21 »
Цитировать
{#Это по-моему #проверяет на повторения...

то что ты запостил к проблеме отношения не имеет
открывает один файл ,сверяет его данные с заданными строками и кидает в другой файл эти же записи, а если они совпадают  то грязно ругается.
 в исканиях.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
чортировать по алфавиту
« Ответ #4 : 12 Марта 2002, 20:30:42 »
Цитировать
Если под нужно лишь Win, то хватает просто use locale;

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

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

Ну может кто кинет тогда ссылку на скрипт?
Ну к чему все это, лучше бы водки выпили...

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
чортировать по алфавиту
« Ответ #5 : 12 Марта 2002, 22:41:54 »
Цитировать
use locale;

Извиняюсь, ступил):
Да кодировка win.
Ну к чему все это, лучше бы водки выпили...

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
сортировка
« Ответ #6 : 12 Марта 2002, 23:01:35 »
use locale;

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

@sorted = sort { $a cmp $b } @words;
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
чортировать по алфавиту
« Ответ #7 : 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

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
чортировать по алфавиту
« Ответ #8 : 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
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
чортировать по алфавиту
« Ответ #9 : 14 Марта 2002, 01:50:05 »
Угу, понятно,
Wyclef
спасибо за подробное объяснение
Чудо свершилось:) - до меня дошло!
Ну к чему все это, лучше бы водки выпили...

 

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