|
#1
|
|||
|
|||
Bargest: Сообщения перенесены из этой темы сюда.
раз уж руби упомянули: http://pastie.org/4683398 Код:
def from @text.scan(between('<b>Участников:</b>','из')).map &:to_i end def to @text.scan(between('из', '</div>')).map &:to_i end def link @text.scan(between('</center><a href=', '><b>')).map &:strip end output from.zip(to, link) три функции возвращают три массива, последняя строчка их склеивает в массив из трёх колонок: http://pastie.org/4683422 >woweook< Последний раз редактировалось Bargest, 19.09.2012 в 17:26. |
#2
|
||||
|
||||
Цитата:
Научить человека хардкодить для решения конкретной задачи это одно, а вот научить человека пользоваться готовым инструментом, позволяющим решать целый ряд подобных задач это другое. Учитесь писать код? Учитесь сразу писать его грамотно. Последний раз редактировалось Lost_Fish, 10.09.2012 в 14:09. |
#3
|
||||
|
||||
Цитата:
Эх, вот такие вот они современные кодеры... сколько я видел таких, когда написать sort() может, а понять как он выполняется - нет. С тем кодом у кодера будет работать голова, а не поиск гугля. Помогаю платно. Помогаю иногда бесплатно. |
Этот пользователь сказал Спасибо @Rafa3L за это полезное сообщение: | ||
Bargest (10.09.2012)
|
#4
|
||||
|
||||
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
@Rafa3L (10.09.2012)
|
#5
|
||||
|
||||
Цитата:
Ну да. Это кодера ты очень точно описал. Ну то кодер. Настоящий программист найдет в гугле бесплатную %notsuper_lib_name_here% и напишет чат на ней. И нефиг изобретать велосипед. Чем быстрее и с минимумом трудозатрат будет выполнена задача - тем проще в первую очередь самому программисту. Писать что-то свое с нуля нужно только в случае если чего-то такого ВООБЩЕ нигде нет или для самообучения (развлечения читай). Вот так вот. 00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110 |
#6
|
||||
|
||||
Цитата:
На многих МК подключение лишней библиотеки равно выходу за пределы доступной памяти и крашу всего проекта. Также я бы не стал в серьёзном проекте полагаться на труды Васи Пупкина из села Задрипинска, который выпустил мне бесплатную библиотеку. Ну а самообучение никогда развлечением не считаю. Единственный толковый способ получения знаний. jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
@Rafa3L (10.09.2012)
|
#7
|
|||
|
|||
имхо для html нужен парсер, но регулярки всяко лучше, чем кусок хардкода
по сути решение занимает три строчки, ещё три вывод в memo, а всё остальное – повторно используемый код какие ещё нужны аргументы? ps что бы писать повторно используемый код, тоже нужна голова Код:
//(освобождений объектов нету) uses PerlRegEx; function scan(input, regexp: string; group: byte = 0): TStringList; var reg: TPerlRegEx; found: boolean; begin reg := TPerlRegEx.Create; reg.Subject := input; reg.RegEx := regexp; result := TStringList.Create; found := reg.Match; while found do begin result.Add(reg.Groups[group]); found := reg.MatchAgain; end; end; function between(one, two: string): string; begin result := format('%s(.*?)%s', [one, two]); end; procedure TForm1.doscanClick(Sender: TObject); var one, two, three: TStringList; i: integer; begin one := scan(input.Text, between('<b>Участников:</b>','из'), 1); two := scan(input.Text, between('из', '</div>'), 1); three := scan(input.Text, between('</center><a href=', '><b>'), 1); output.Clear; for i := 0 to one.Count - 1 do output.Lines.add(format('%s * %s * %s', [one[i],two[i],three[i]])); end; >woweook< |
#8
|
||||
|
||||
Решил проверить твой метод и сравнить с моим:
1. Результаты: Мой метод: Код:
0 32 /tournaments/4970671/act=join&step=1 0 16 /tournaments/4973598/act=join&step=1 3 16 /tournaments/4970554/act=join&step=1 1 16 /tournaments/4973288/act=join&step=1 0 32 /tournaments/4970598/act=join&step=1 Твой метод: Код:
0 * овой фонд:</b> 10.800<br><li> <b>Длительность:</b> до 64 минут<li> <b>Уровень игрока:</b> 3<li> <b>Опыт футболистам:</b> 200%<li> <b>Участников:</b> 0 из 32 * /tournaments/4970671/act=join&step=1 0 * овой фонд:</b> 5.300<br><li> <b>Длительность:</b> до 71 минут<li> <b>Уровень игрока:</b> 3<li> <b>Опыт футболистам:</b> 200%<li> <b>Участников:</b> 0 из 16 * /tournaments/4973598/act=join&step=1 3 * овой фонд:</b> 4.900<br><li> <b>Длительность:</b> до 57 минут<li> <b>Уровень игрока:</b> 3<li> <b>Опыт футболистам:</b> 200%<li> <b>Участников:</b> 3 из 16 * /tournaments/4970554/act=join&step=1 1 * овой фонд:</b> 5.300<br><li> <b>Длительность:</b> до 71 минут<li> <b>Уровень игрока:</b> 3<li> <b>Опыт футболистам:</b> 200%<li> <b>Участников:</b> 1 из 16 * /tournaments/4973288/act=join&step=1 0 * овой фонд:</b> 10.600<br><li> <b>Длительность:</b> до 64 минут<li> <b>Уровень игрока:</b> 3<li> <b>Опыт футболистам:</b> 200%<li> <b>Участников:</b> 0 из 32 * /tournaments/4970598/act=join&step=1 (в задании сказано: Т.е. мне нужно: нашёл первое слово 'Участников' , нашёл количество участников '0 из 32',проанализировал сколько и нашёл строку со ссылкой '/tournaments/4970598/act=join&step=1'. и все.) 2. Скорость: (для одинакового числа повторений, задавал 100...0.) Мой метод: 00:01 сек ; Твой метод: 1 минута 25 сек ; Итог, как минимум в 85 раз медленнее. П.с.: и тот мой метод далеко не хардкод, я его писал на коленке и много не думал, там его можно еще ускорять и ускорять... Помогаю платно. Помогаю иногда бесплатно. Последний раз редактировалось @Rafa3L, 12.09.2012 в 00:34. |
#9
|
|||
|
|||
удивительно, но у меня тот код возвращает:
Код:
0 * 32 * /tournaments/4970671/act=join&step=1 0 * 16 * /tournaments/4973598/act=join&step=1 3 * 16 * /tournaments/4970554/act=join&step=1 1 * 16 * /tournaments/4973288/act=join&step=1 0 * 32 * /tournaments/4970598/act=join&step=1 что бы тот код написать на коленке и он сразу заработал надо или быть гением, или же писать каждый день кучи такого хардкода Код:
if s[i+1]='ч' then if copy(s,i+2,8)='астников' then begin if s[i+18]='и' then //21-я после буквы "У", и между "0 из 32" begin t1:=s[i+16]; // 0 16-я после буквы "У" t2:=copy(s,i+21,2); //32 21-я после буквы "У",длина 2 t3:=copy(s,i+106,36); //ccылка 106-я после буквы "У",длина 36 если придётся уточнить код (из за ложных совпадений например) в моём случае всё делается очевидным образом в вашем – сколько времени придётся подбирать правильные циферки, и сколько циклов добавить? имхо всё очевидно: если не знаете "X", нет желания изучать "X" (возможно и по объективным причинам) => не надо оправдывать это "производительностью", так и скажите: не знаю, нет желания. (в "X" можете подставить: регулярные выражения, ООП, agile?, ...) ни один человек знающий регулярки не будет писать ту жесть, если только он не под по дулом пистолета. наверно потому что дураки, и придумали регулярки тоже дураки >woweook< |
#10
|
||||
|
||||
To @Rafa3L если показывать такой код потенциальному работадателю шансы на трудоустройство резко падают, они такой код просто не смотрят, проверено
|
#11
|
||||
|
||||
Когда-то давно я писал на одном непрограммском форуме, и там часто споры заканчивался в стиле "сам ты дурак!".
А когда начал читать математически-программные форумы, то первое что понравилось это то что в споре прав тот кто докажет что прав на примере, в верном решении задачи. Когда-то прогеры были честными энтузиастами, которым было безразлично к коммерции. Сейчас же выше явный пример современного подхода в программировании. Это уже полу прогер полу коммерсант, привыкший "парить" лоху-заказчику. И тут я вижу, Pyro, вместо того чтобы доказать что его код лучший переходит на аргументы: "И ты не знаешь выражений, ты лох!" А то что с его выражениями программа работает в 85 раз медленнее уже его не интересует. Это идет из америки, где у заказчика куча денег и он хочет красивую картинку. И он понятия не имеет как оно на самом деле работает. И возникает целая каста программистов-коммерсантов-консультантов, задачей которых есть не написание качественной быстрой нересурсоемкой программы, а задача "впарить" "лохам" красивые решения. О работодателях, если ко мне придет устраиваться прогрер, для которого чтобы найти в тексте слово необходимы регулярные выражения - он будет послан далеко в астрал. А слова "удивительно а у меня код работает" - это фирменная фишка?) Это вы всем заказчикам так парите? Помогаю платно. Помогаю иногда бесплатно. Последний раз редактировалось @Rafa3L, 12.09.2012 в 20:13. |
#12
|
||||
|
||||
Нормально все с регулярками там работает. Ты наверное не ту библиотеку подключил или еще что. Может IDE глючило. Сам же написал, что результат неверный получил. Проверь еще раз. И не надо переходить на личности и домысливать того чего не было. Pyro не называл тебя лохом и не подразумевал этого.
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110 |
#13
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#14
|
||||
|
||||
всего лишь хотел сказать что в достаточно серьёзном проекте, таком как автоматизация предприятия, твой хардкод не будет никому интересен, по упомянутым Pyro причинам + скорость разработки давольно большого объема кода резко падает, я переписывал жутко тормозящую неповоротливою прогу у которой на главной форме 15т. строчек кода, а форм там было около 30 разного калибра, предыдущие 2 хардкодера писали её 2 года сперва один, потом второму было лень переписывать он сидел подкручивал, переписал за 4 месяца стало намного лучше. Добавить, изменить, доработать что-то занимает намного меньше времени чем раньше.
Вопрос к @Rafa3L чем ООП лучше твоего подхода? P.S. Без обид, может ты не тот язык выбрал, может стоило попробовать ассемблер? Последний раз редактировалось Lost_Fish, 13.09.2012 в 08:29. |
#15
|
|||
|
|||
аргументы в пользу того кода уже я приводил: (производительность программистов)
> если что-то пошло не так(редизайн сайта), то можно обойтись изменениями только в трёх строчках кода > повторно используемый код для других задач/для других программистов > ясный и понятный код, без комментариев, без анти-паттернов "Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку." Мартин Фаулер по поводу этих и других аргументов, всё уже написано во множестве хороших книг http://habrahabr.ru/post/135897/ нет энтузиазма читать книги, или если какие другие причины, то не надо обвинять американцев, или говорить, что программирование деградирует с каждым днём (потому что это не так) именно энтузиасты читают книги/пишут статьи, учавствуют/создают open source проекты я ещё в open-source не освоился, но начинал это зло примерно так: сначала услышал от одного php-иста, что он никогда бы на дельфи не стал писать бд+интерфейс к ней. прочитал книжку по php+ajax, что бы написать один рабочий скрипт, оттуда узнал про регулярки, скачал книгу про регулярки, для того, чтобы удобно практиковаться в регулярках – скачал perl, но синтаксис мне не понравился сразу, взялся за python, написал на нём скрипт для себя, потом из за отсутствия простейшей мелочи в синтаксисе, решил проверить, есть ли она в руби, в руби она была – взялся за руби, и только там узнал, что ооп – удобная штука (и ооп это только начало). в общем не надо про коммерцию, или американцев, каждый делает так, как считает правильным, и в принципе невозможно, что бы программирование деградировало Цитата:
>woweook< |
Этот пользователь сказал Спасибо Pyro за это полезное сообщение: | ||
cdtj (18.09.2012)
|