The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"аналоги sed, wc на perl"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 05-Окт-09, 11:03 
доброго всем.. чего-нибудь
начал тут изучать перловку после изучения шелла.. пытаюсь найти аналохи давно привычных операций, типа wc -l, sed 2000!d filename и т.д., и чё-то гуголь не помогает совсем
какие-то там сложные всё решения
например, предлагается для подсчёта строк в файле использовать:

open(FILENAME,"filename");
while(<>)
{
}
print $."\n";

тобишь он должен пробежать по всему файлу и выдать номер последней строки.. Ы
но вообще есть мысль (подтверждённая книжкой с верблюдом, которую я аж 74 страницы уже прочёл), что перл авто_в_курсе сколько в каждом считываемом файле строк и сколько в каждой считываемой строке символов (кстати, аналог wc -m это length $curline) и т.д., поэтому вот ищу какой-то способ по ресурсонезависемей, чем считывания построчно всего файла.. а особенно, если он в цикле....

конкретно, хотелось бы, для начала, научиться воспроизводить:
wc -l, wc -w (последнее, видимо, читается через split(), а потом можно посчитать кол-во элементов в массиве видимо.. проще никак?)
sed -n 900p (или sed 900!d), т.е. распечатка конкретной строки из файла
пробовал:
open (FILENAME,"namefile");
foreach (<FILENAME>)
{
print $_ if $.==12;
}
но, во1, оно, опять же, считывает построчно весь файл, что не совсем эффективно, а, во2, не работает..

вот.. может кто подскажет, а то книжку пока прочту..

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "аналоги sed, wc на perl"  +/
Сообщение от Michael (??) on 05-Окт-09, 11:17 

>но вообще есть мысль (подтверждённая книжкой с верблюдом, которую я аж 74
>страницы уже прочёл), что перл авто_в_курсе сколько в каждом считываемом файле
>строк и сколько в каждой считываемой строке символов (кстати, аналог wc

как по вашему перл должен узнать, сколько строк в файле, пока не прочинает его целиком и не сосчитает, сколько символов перевода строки в нем?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 05-Окт-09, 11:57 
>
>>но вообще есть мысль (подтверждённая книжкой с верблюдом, которую я аж 74
>>страницы уже прочёл), что перл авто_в_курсе сколько в каждом считываемом файле
>>строк и сколько в каждой считываемой строке символов (кстати, аналог wc
>
>как по вашему перл должен узнать, сколько строк в файле, пока не
>прочинает его целиком и не сосчитает, сколько символов перевода строки в
>нем?

перескочить к последней строке например?
или может подобная инфа содержится в заголовке файла..
а wc что считает все строки?
хотя перл быстрее раза в 3-4 отрабатывает такой подсчёт, чем wc..
но вообще я надеялся, что там функция есть, типа length(), для строк

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "аналоги sed, wc на perl"  +/
Сообщение от XAnder (ok) on 05-Окт-09, 13:01 
>перескочить к последней строке например?

И что мы узнаем, кроме того, что эта строка первая с конца? А нам-то нужно с начала.

>или может подобная инфа содержится в заголовке файла..

Не содержится.

>а wc что считает все строки?

Конечно считает, для этого программа и предназначена.

Пёрл творит чудеса только в переносном смысле :-) а так работает, как и любая другая программа. Попробуйте представить себе алгоритм решения этой задачи (если не лень, то с блок-схемами, стрелочками и квадратиками), тут же куча вопросов отпадёт сама собой.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 05-Окт-09, 13:48 
>[оверквотинг удален]
>Не содержится.
>
>>а wc что считает все строки?
>
>Конечно считает, для этого программа и предназначена.
>
>Пёрл творит чудеса только в переносном смысле :-) а так работает, как
>и любая другая программа. Попробуйте представить себе алгоритм решения этой задачи
>(если не лень, то с блок-схемами, стрелочками и квадратиками), тут же
>куча вопросов отпадёт сама собой.

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

ну а чего ж не работает этот код:

open (FILENAME,"namefile");
foreach (<FILENAME>)
{
print $_ if $.==12;
}

вроде всё логично..
и самая что ни на есть замена sed должна быть

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "аналоги sed, wc на perl"  +/
Сообщение от XAnder (ok) on 05-Окт-09, 14:33 
>ну а чего ж не работает этот код:

Всё просто:

>open (FILENAME,"namefile");

Открыли файл, ничего не прочитали пока.

>foreach (<FILENAME>)

Подставили файл туда, где ожидается список. Соответственно из файла (неявно!) делается список, т. е. файл читается, разбивается на строки, из которых и составляется список.

>{
>print $_ if $.==12;

Ага! Файл-то уже прочитан весь! Тогда $. сразу же содержит число строк в этом файле.

>}

Ох уж эти неявные преобразования в Пёрле! Они делают программы лёгкими для написания, но трудными для понимания и ловли глюков ;-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "аналоги sed, wc на perl"  +/
Сообщение от Pahanivo email(ok) on 05-Окт-09, 14:44 
а в чем смысл всего этого маразма?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "аналоги sed, wc на perl"  +/
Сообщение от XAnder (ok) on 05-Окт-09, 15:05 
>а в чем смысл всего этого маразма?

ХЗ. Думаю, человек познаёт мир :-) Похвально, что же...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "аналоги sed, wc на perl"  +/
Сообщение от Pahanivo email(ok) on 05-Окт-09, 16:21 
>>а в чем смысл всего этого маразма?
>
>ХЗ. Думаю, человек познаёт мир :-) Похвально, что же...

не считаю сильно похвальным познавать мир через ж... ))
любая книжка по перл-програмингу наставила бы на путь истинный

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "аналоги sed, wc на perl"  +/
Сообщение от XAnder (ok) on 05-Окт-09, 16:47 
>>>а в чем смысл всего этого маразма?
>>
>>ХЗ. Думаю, человек познаёт мир :-) Похвально, что же...
>
>не считаю сильно похвальным познавать мир через ж... ))
>любая книжка по перл-програмингу наставила бы на путь истинный

Истину глаголишь :-) Но не могу я так сразу посылать на букву G. Впрочем, теперь уже пора.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 05-Окт-09, 15:13 
>[оверквотинг удален]
>>{
>>print $_ if $.==12;
>
>Ага! Файл-то уже прочитан весь! Тогда $. сразу же содержит число строк
>в этом файле.
>
>>}
>
>Ох уж эти неявные преобразования в Пёрле! Они делают программы лёгкими для
>написания, но трудными для понимания и ловли глюков ;-)

непонятно, почему он уже весь прочитан, когда должен отработать блок {} для каждой строки..
вообще оно работает, если вместо foreach использовать while
очевидно я плохо понял значение foreach...

P.S. кстати, аналог wc -w:
open(FILENAME,"namefile");
@words=split(/ /, $_);
$wordsnumber=scalar @words;

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "аналоги sed, wc на perl"  +/
Сообщение от XAnder (ok) on 05-Окт-09, 15:34 
>непонятно, почему он уже весь прочитан, когда должен отработать блок {} для
>каждой строки..

Ещё раз внимательно перечитайте про неявное преобразование файла в список и поймёте, что не "для каждой строки", а для "для каждого элемента списка". А дальше попробуйте понять разницу между ними.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "аналоги sed, wc на perl"  +/
Сообщение от Andrey Mitrofanov on 05-Окт-09, 11:22 
>начал тут изучать перловку
>типа wc -l, sed 2000!d filename и т.д., и чё-то

google.ru + perl oneliners "wc -l"
и т.п.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 21-Окт-09, 23:01 
ок
начитался книжку. напрограммировал уже на тысячу строк
очень парит одна непонятная вещь
глюки со знаками меньше/больше либо равно
<= =>
а также их эквивалентами: le ge
просто необъяснимые глюки какие-то..
примеры слишком увесистые, но вкраце: если пишешь: $ll < 3000 (где $ll = length $line), то всё ок
а если написать $ll <= 3000 или $ll le 3000, то идут глюки и неправильности в вычислении
контекст такой: if((1100 < $ll) & ($ll < 2100)){ ... }
так работает, а вот так глючит: if((1100 < $ll) & ($ll le 2100)){ ... }
почему так?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "аналоги sed, wc на perl"  +/
Сообщение от allez (ok) on 22-Окт-09, 08:52 
>начитался книжку. напрограммировал уже на тысячу строк
>очень парит одна непонятная вещь
>глюки со знаками меньше/больше либо равно
><= =>
>а также их эквивалентами: le ge
>просто необъяснимые глюки какие-то..
>примеры слишком увесистые, но вкраце: если пишешь: $ll < 3000 (где $ll
>= length $line), то всё ок
>а если написать $ll <= 3000 или $ll le 3000, то идут
>глюки и неправильности в вычислении

Начитайтесь заодно perldoc perlop:

Relational Operators 

Binary "<" returns true if the left argument is numerically less than the right argument.
Binary ">" returns true if the left argument is numerically greater than the right argument.
Binary "<=" returns true if the left argument is numerically less than or equal to the right argument.
Binary ">=" returns true if the left argument is numerically greater than or equal to the right argument.
Binary "lt" returns true if the left argument is stringwise less than the right argument.
Binary "gt" returns true if the left argument is stringwise greater than the right argument.
Binary "le" returns true if the left argument is stringwise less than or equal to the right argument.
Binary "ge" returns true if the left argument is stringwise greater than or equal to the right argument.


Надеюсь, разницу между "numerically" и "stringwise" объяснять не надо?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 22-Окт-09, 10:02 
>[оверквотинг удален]
>Binary "lt" returns true if the left argument is stringwise less than
>the right argument.
>Binary "gt" returns true if the left argument is stringwise greater than
>the right argument.
>Binary "le" returns true if the left argument is stringwise less than
>or equal to the right argument.
>Binary "ge" returns true if the left argument is stringwise greater than
>or equal to the right argument.
>
>Надеюсь, разницу между "numerically" и "stringwise" объяснять не надо?

хмм.. в книжке про это всего пол-страницы. и не сказано даже, что есть строковая величина.. длина её? ширина? :D если длина, то эквивалент length ?
тобишь '1000 <= length$line' всё-равно что '$line ge 1000' так чтоли?
или надо $line ge $line2
я ещё и => писал, вместо >=

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "аналоги sed, wc на perl"  +/
Сообщение от angra (ok) on 22-Окт-09, 15:45 
На пальцах
$ perl -E '$a=2;$b=10;say 1 if $a < $b; say 2 if $a lt $b;'
1
Как число 2 меньше 10, а как строка больше ибо строки сравниваются посимвольно и символ 2 идет позже символа 1.
Проблемы с < и <= мне непонятны, покажите пример. Надеюсь о том, что нельзя применять равенство к вещественным(не целым) числам, вам в школе рассказали.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

17. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 22-Окт-09, 16:51 
>На пальцах
>$ perl -E '$a=2;$b=10;say 1 if $a < $b; say 2 if
>$a lt $b;'
>1
>Как число 2 меньше 10, а как строка больше ибо строки сравниваются
>посимвольно и символ 2 идет позже символа 1.
>Проблемы с < и <= мне непонятны, покажите пример.

пример вот:
если пишешь: $ll < 3000 (где $ll = length $line), то всё ок
а если написать $ll <= 3000 или $ll le 3000, то идут глюки и неправильности в вычислении
контекст такой: if((1100 < $ll) & ($ll < 2100)){ ... }
так работает, а вот так глючит: if((1100 < $ll) & ($ll le 2100)){ ... }

>Надеюсь о том, что нельзя применять равенство к вещественным(не целым) числам, вам в >школе рассказали.

шутите? у меня школа была давным-давно, а чтобы такое помнить, надо регулярно математить чего-нибудь. я даже не помню, что такое "вещественное число".. пришлось в википедии смотреть

---
Веще́ственные, или действи́тельные[1] числа — математические объекты, введённые для представления и сравнения значений физических величин.

Физи́ческая величина́ — это количественная характеристика объекта или явления в физике, либо результат измерения.
---

и количественная характеристика и результат измерения, по сути, числа..........
короче, я запутался, почему к числам нельзя применять равенства
на пальцах как-то понятней было :D

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

18. "аналоги sed, wc на perl"  +/
Сообщение от angra (ok) on 22-Окт-09, 21:07 
>если пишешь: $ll < 3000 (где $ll = length $line), то всё
>ок
>а если написать $ll <= 3000 или $ll le 3000, то идут
>глюки и неправильности в вычислении

Приведите пример где замена $ll < 3000 на $ll <= 3000 вызовет проблему. Главное не меняйте при этом больше ничего, а то сдается вы одновременно меняете еще и числовое сравнение на строковое.

>контекст такой: if((1100 < $ll) & ($ll < 2100)){ ... }
>так работает, а вот так глючит: if((1100 < $ll) & ($ll le
>2100)){ ... }

Perl в отличии от многих языков не делает разницы между числовыми и строковыми данными в скалярах. То есть $a=1 и $a="1" это одно и то же значение. Различия возникают в момент использования. Программист должен указать как он хочет интерпретировать значения в конкретном случае. Так как длина строки есть _по смыслу_ число, то применять надо операторы для сравнения чисел. Что совершенно не помешает в другом месте применить к той же переменной строковые сравнения, если в этом месте она нам нужна как строка.

>и количественная характеристика и результат измерения, по сути, числа..........
>короче, я запутался, почему к числам нельзя применять равенства
>на пальцах как-то понятней было :D

Тут не столько математическая, сколько чисто компьютерная проблема. Вещественные числа в процессоре имеют ограниченное количество цифр, как следствие возникают погрешности округления. Поэтому например $a=2/5*5 может оказаться не ровно 2, а 2.000000000001 или 1.99999999999. Как следствие нельзя делать прямое сравнение if $a == 2, а нужно сравнение на минимальную разницу вроде такого: if abs($a-2)<0.00001

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 23-Окт-09, 00:04 
>Приведите пример где замена $ll < 3000 на $ll <= 3000 вызовет
>проблему. Главное не меняйте при этом больше ничего, а то сдается
>вы одновременно меняете еще и числовое сравнение на строковое.

я там уже скрипт перекоцал, но щас подстановка <= вместо < работает без сбоев. вполне допускаю, что меня проглючило и я какие-то другие ошибки приписал к <=
le всё также не работает, поскольку я пытаюсь не по длине строки мерять, а посимвольно. это мне и нужно было знать. спасибо, что всё так подробно разжевали

ещё бы понять, а где может понадобиться посимвольное сравнение.. вот в шелле я юзал le lt gt ge вместо знаков, потому что знаки там иногда делали другую операцию.. например, > пытался записать в файл.. а тут какие-то посимвольные сравнения...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

20. "аналоги sed, wc на perl"  +/
Сообщение от angra (ok) on 23-Окт-09, 02:34 
>ещё бы понять, а где может понадобиться посимвольное сравнение..

На этот вопрос тяжело ответить, слишком элементарен. С тем же успехом можно спросить где могут понадобится числовые сравнения. Хотя могу заметить, что для строковых, по сравнению с числовыми, реже нужно le/lt/gt/lt и чаще eq/ne/cmp.

>вот в шелле я юзал le lt gt ge вместо знаков

В шелле(по крайней мере в bash) как раз le lt gt ge означают численное сравнение, а <, >, <=, >= итд строковое. Редкий случай когда в перле что-то сделано абсолютно противоположно шеллу, однако данный подход более логичен(символы соответствуют цифрам, а буквы строкам). А вот что курили создатели шелла можно только гадать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

21. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 23-Окт-09, 09:21 
>>ещё бы понять, а где может понадобиться посимвольное сравнение..
>
>На этот вопрос тяжело ответить, слишком элементарен. С тем же успехом можно
>спросить где могут понадобится числовые сравнения. Хотя могу заметить, что для
>строковых, по сравнению с числовыми, реже нужно le/lt/gt/lt и чаще eq/ne/cmp.

об том и речь, что сравнить строку на эквивалентность другой строке - обычное дело
а посимвольно вычислять больше/меньше ещё надо придумать где

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

22. "аналоги sed, wc на perl"  +/
Сообщение от Андрей (??) on 23-Окт-09, 12:46 
>>>ещё бы понять, а где может понадобиться посимвольное сравнение..
>>
>>На этот вопрос тяжело ответить, слишком элементарен. С тем же успехом можно
>>спросить где могут понадобится числовые сравнения. Хотя могу заметить, что для
>>строковых, по сравнению с числовыми, реже нужно le/lt/gt/lt и чаще eq/ne/cmp.
>
>об том и речь, что сравнить строку на эквивалентность другой строке -
>обычное дело
>а посимвольно вычислять больше/меньше ещё надо придумать где

Мдя... В школу бы вам вернуться, батенька... Алгоритмы бы поучить. И вообще, с какой такой стати вы занялись написанием скриптов?

P.S. Посимвольное сравнение - сортировка строк. Опа! Или вы выше этого?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

26. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 23-Окт-09, 14:21 
>Мдя... В школу бы вам вернуться, батенька... Алгоритмы бы поучить. И вообще,
>с какой такой стати вы занялись написанием скриптов?

с какой целью интересуетесь?

>P.S. Посимвольное сравнение - сортировка строк. Опа! Или вы выше этого?

сортировка в перле уже есть. когда будет её не хватать, напишу свой. тут каждому своё.. кто-то велосипеды лепит, кто-то реальные задачи решает, которые выхлоп имеют..
а вот посимвольного сравнения в моих задачах то и нет, поэтому буду юзать < > <= >= :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

28. "аналоги sed, wc на perl"  +/
Сообщение от jd (??) on 23-Окт-09, 17:17 
>>Мдя... В школу бы вам вернуться, батенька... Алгоритмы бы поучить. И вообще,
>>с какой такой стати вы занялись написанием скриптов?
>
>с какой целью интересуетесь?

Я думаю, тут все задаются этим вопросом. Потому что судя по тому, что вы пишете, программирование - как бы не совсем ваша сильная область. Честно говоря, это всё выглядит, как если бы человек пришёл на соревнования по лёгкой атлетике и спрашивал окружающих, как правильно кроссовки надевать. Конечно, ничто не помешало бы ему участвовать в соревнованиях, но выглядело бы это по меньшей мере странно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

29. "аналоги sed, wc на perl"  +/
Сообщение от greenwar (ok) on 23-Окт-09, 18:56 
>>с какой целью интересуетесь?
>
>Я думаю, тут все задаются этим вопросом. Потому что судя по тому,
>что вы пишете, программирование - как бы не совсем ваша сильная
>область. Честно говоря, это всё выглядит, как если бы человек пришёл
>на соревнования по лёгкой атлетике и спрашивал окружающих, как правильно кроссовки
>надевать. Конечно, ничто не помешало бы ему участвовать в соревнованиях, но
>выглядело бы это по меньшей мере странно.

по-вашему, тут соревнования? :)

P.S. до 21 августа сего года, я даже на шелле не умел писать ничего.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

31. "аналоги sed, wc на perl"  +/
Сообщение от jd (??) on 24-Окт-09, 01:20 
>по-вашему, тут соревнования? :)

Нет, по-моему то, что вы тут пишете, звучит странно, если не сказать, сюрреалистично. Но, в конце концов, это всё не относится к теме форума...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

30. "аналоги sed, wc на perl"  +/
Сообщение от angra (ok) on 23-Окт-09, 20:17 
>а вот посимвольного сравнения в моих задачах то и нет, поэтому буду юзать < > <= >= :)

Ну а в моих текущих задачах нет вообще никакой нужды в числовых сравнениях, так что теперь их убрать надо? А как вы отсортируете при помощи sort, но без cmp сложную структуру(например по $req->{answer}{name}) или скаляры и одномерные списки это пока ваш предел? С алфавитно-цифровыми наименованиями/нумерацией тоже не сталкивались, номер паспорта или автомобиля к примеру, не говоря уже про всевозможные формы/отчеты/постановления итд.
Кстати не исключен вариант, что в вашей задаче вообще не нужны сравнения, просто вы не владеете другими инструментами Perl ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

23. "аналоги sed, wc на perl"  +/
Сообщение от allez (ok) on 23-Окт-09, 12:50 
>об том и речь, что сравнить строку на эквивалентность другой строке -
>обычное дело
>а посимвольно вычислять больше/меньше ещё надо придумать где

Сортировка по алфавиту уже давно существует. Не надо ее придумывать заново. ;-)
Другое дело, что в Perl нет необходимости реализовывать ее вручную, имея оператор sort.
Разве что для общего развития... :-)

P. S. Пока писал, Андрей меня опередил. Прошу плагиатором не считать. :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

24. "аналоги sed, wc на perl"  +/
Сообщение от Андрей (??) on 23-Окт-09, 13:00 
>[оверквотинг удален]
>>а посимвольно вычислять больше/меньше ещё надо придумать где
>
>Сортировка по алфавиту уже давно существует. Не надо ее придумывать заново. ;-)
>
>Другое дело, что в Perl нет необходимости реализовывать ее вручную, имея оператор
>sort.
>Разве что для общего развития... :-)
>
>P. S. Пока писал, Андрей меня опередил. Прошу плагиатором не считать. :-)
>

Честно признаюсь, перла не знаю :) Бог миловал. Но с другой стороны, знаю, что каждый начинающий кодер, как правило пытается сделать 3 вещи: написать свою мегаэффективную сортировку, написать свой мегаэффективный архиватор, написать свой мегаэффективный редактор. Иногда одно из перечисленных заменяется на мегаигруху. Знаю, потому что сам грешен :), правда меня хватило только на архиватор.
А сортировка - весщь коническая. Несколько раз по некоторым причинам пришлось свой алгоритм реализовывать. Так что, алгоритмы знать не помешает.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

25. "аналоги sed, wc на perl"  +/
Сообщение от allez (ok) on 23-Окт-09, 13:44 
>Честно признаюсь, перла не знаю :) Бог миловал. Но с другой стороны,
>знаю, что каждый начинающий кодер, как правило пытается сделать 3 вещи:
>написать свою мегаэффективную сортировку, написать свой мегаэффективный архиватор, написать свой мегаэффективный
>редактор. Иногда одно из перечисленных заменяется на мегаигруху. Знаю, потому что
>сам грешен :), правда меня хватило только на архиватор.

Как же без этого? :-) У меня товарищ, например, в свое время мегаСУБД делал на QuickBasic и
даже пытался как-то продвигать. Но народ что-то не хотел со всяких "Клипперов" слезать. :-)

>А сортировка - весщь коническая. Несколько раз по некоторым причинам пришлось свой
>алгоритм реализовывать. Так что, алгоритмы знать не помешает.

Да я разве возражаю? В Си, например, знание алгоритмов сортировки было просто необходимо
для того, чтобы не использовать ужасный qsort() на больших массивах данных (сразу оговорюсь - на
Си давно не пишу и не слежу за его развитием, поэтому на данный момент положение дел может
быть совсем другим).

В Перле же sort реализован более эффективно, накладные расходы при его использовании гораздо
ниже, поэтому знание этих алгоритмов уже не вопрос жизни и смерти, а признак уровня культуры
и, как я уже сказал, общего развития программиста.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

27. "аналоги sed, wc на perl"  +/
Сообщение от Андрей (??) on 23-Окт-09, 15:19 
>Да я разве возражаю? В Си, например, знание алгоритмов сортировки было просто
>необходимо
>для того, чтобы не использовать ужасный qsort() на больших массивах данных

ААА!!!! Телепаты на опеннете!!! Ты ЗНАЛ!!! Ты все ЗНАЛ!!! :D

>поэтому знание этих алгоритмов уже не вопрос жизни и смерти, а
>признак уровня культуры
>и, как я уже сказал, общего развития программиста.

Так и я про тоже ))). Про общее развитие кодера. По этому и посоветовал повторить азы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

33. "аналоги sed, wc на perl"  +/
Сообщение от аноним on 02-Ноя-09, 15:25 
>Да я разве возражаю? В Си, например, знание алгоритмов сортировки было просто
>необходимо
>для того, чтобы не использовать ужасный qsort() на больших массивах данных

И что же не так с сишным qsort? И сразу уточните, про какую libc вы говорите.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

34. "аналоги sed, wc на perl"  +/
Сообщение от allez (ok) on 03-Ноя-09, 12:03 
>И что же не так с сишным qsort?

На малых объемах данных с ним все вполне себе "так". С большими же объемами алгоритм "пузырька",
который был реализован в qsort(), лучше не применять.

>И сразу уточните, про какую libc вы говорите.

Это приказ? :-D
Я последний раз писал на Си в 1990 году. В моей организации использовался Borland Turbo C,
позже - Borland C++. Ни версий сред, ни тем более версий входивших в их состав библиотек
я не помню, а выяснять лениво, уж извините великодушно. :-)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

35. "аналоги sed, wc на perl"  +/
Сообщение от аноним on 03-Ноя-09, 20:34 
>На малых объемах данных с ним все вполне себе "так". С большими
>же объемами алгоритм "пузырька",
>который был реализован в qsort(), лучше не применять.

The qsort() function is a modified partition-exchange sort, or quicksort.

Пузырек там если и был, то только в абсолютно маргинальных реализациях.

>>И сразу уточните, про какую libc вы говорите.
>
>Это приказ? :-D

Почему такая неадекватная реакция? Реализаций libc было море, и они как-бы многим различаются. А вы говорите примерно то же, что "автомобили не ездят", видев 20 лет назад единственный гнилой таз.

> Я последний раз писал на Си в 1990 году

В таком случае я бы на вашем месте постеснялся высказываться по этой теме.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

36. "аналоги sed, wc на perl"  +/
Сообщение от allez (ok) on 03-Ноя-09, 22:28 
>The qsort() function is a modified partition-exchange sort, or quicksort.
>
>Пузырек там если и был, то только в абсолютно маргинальных реализациях.

Таки да, каюсь, память все же подвела...
Алгоритм Хоара, конечно, более совершенен, чем "пузырек", но при его применении к большим
массивам данных, неудачном выборе опорного элемента есть риск переполнить стек или просто
не дождаться конца сортировки. :-)

>Почему такая неадекватная реакция? Реализаций libc было море, и они как-бы многим
>различаются. А вы говорите примерно то же, что "автомобили не ездят",
>видев 20 лет назад единственный гнилой таз.

А тот же алгоритм Хоара за эти годы как-то изменился?
Если быть более точным, то я говорил не о том, что "автомобили не ездят", а о том, что они
"когда-то не всегда хорошо ездили, но не исключено, что сейчас ездят лучше". Согласитесь, есть разница.
Процитирую сам себя:
>(сразу оговорюсь - на Си давно не пишу и не слежу за его развитием, поэтому на данный момент
>положение дел может быть совсем другим
)

Кстати, а вы для сортировки используете только qsort() или пользуетесь и другими алгоритмами?


>В таком случае я бы на вашем месте постеснялся высказываться по этой
>теме.

Да ради бога, будете на моем месте - стесняйтесь сколько угодно. ;-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

37. "аналоги sed, wc на perl"  +/
Сообщение от аноним on 04-Ноя-09, 00:39 
>Таки да, каюсь, память все же подвела...
>Алгоритм Хоара, конечно, более совершенен, чем "пузырек"

"Более совершенен"? Вообще-то NlogN против N^2.

>но при его применении к большим массивам данных, неудачном выборе
>опорного элемента есть риск переполнить стек или просто
>не дождаться конца сортировки. :-)

А при применении пузырька мы гарантированно не дождемся конца сортировки, если уж на то пошло.

Почтитайте хотя бы это: http://ru.wikipedia.org/wiki/%D0%91%D1%8....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

38. "аналоги sed, wc на perl"  +/
Сообщение от allez (ok) on 04-Ноя-09, 09:19 
>"Более совершенен"? Вообще-то NlogN против N^2.
>Почтитайте хотя бы это: http://ru.wikipedia.org/wiki/%D0%91%D1%8....

Читаем:

Недостатки:
Сильно деградирует по скорости (до Θ(n^2)) при неудачных выборах опорных элементов,
что может случиться при неудачных входных данных.

Ну и кроме того, время сортировки одного и того же набора данных может заметно отличаться
от раза к разу, что само по себе не катастрофа, но и не очень-то приятно. Впрочем, эти недостатки
как минимум частично можно устранить при реализации алгоритма.

>А при применении пузырька мы гарантированно не дождемся конца сортировки, если уж на то пошло.

Да я разве спорю с этим? Если честно я вовсе ни с кем и ни с чем спорить не собирался. :-)
Просто захотел подкрепить примером тезис о том, что программисту крайне нежелательно
ограничивать свой кругозор стандартными средствами используемого языка. Очень даже допускаю,
что моя попытка вышла не слишком удачной. Засим предлагаю свернуть нашу дискуссию, как
исчерпавшую себя. Я вполне признаю вашу правоту и никоим образом не собираюсь на нее
посягать. Да и поднафлудили мы с вами тут уже. :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

32. "аналоги sed, wc на perl"  +/
Сообщение от scyphius (ok) on 01-Ноя-09, 13:09 
На тему аналогов sed и awk можно почитать
perldoc perlrun (http://perldoc.perl.org/perlrun.html)
и довольно неплохая, на мой взгляд, статья http://habrahabr.ru/blogs/perl/70610/
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру