Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Разное > Флейм
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.09.2012, 07:17
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
Подмигивание

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)
регулярное выражение находится в функции between
три функции возвращают три массива, последняя строчка их склеивает в массив из трёх колонок: http://pastie.org/4683422
__________________
>woweook<

Последний раз редактировалось Bargest, 19.09.2012 в 17:26.
Ответить с цитированием
  #2  
Старый 10.09.2012, 13:23
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Цитата:
И никакого:
руби,джава, лайка в твиттере и публикации в ФБ, никаких дополнительных библиотек и модулей.
только чистый хард код)) километрами которого при желании можно и весь VCL переписать и тогда вообще ничё подключать не нужно будет))

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

Учитесь писать код? Учитесь сразу писать его грамотно.

Последний раз редактировалось Lost_Fish, 10.09.2012 в 14:09.
Ответить с цитированием
  #3  
Старый 10.09.2012, 19:51
Аватар для @Rafa3L
@Rafa3L @Rafa3L вне форума
Начинающий
 
Регистрация: 09.11.2011
Адрес: Москва
Сообщения: 144
Версия Delphi: XE2
Репутация: 11216
По умолчанию

Цитата:
Сообщение от Lost_Fish
только чистый хард код)) километрами которого при желании можно и весь VCL переписать и тогда вообще ничё подключать не нужно будет))

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

Учитесь писать код? Учитесь сразу писать его грамотно.

Эх, вот такие вот они современные кодеры... сколько я видел таких, когда написать sort() может, а понять как он выполняется - нет.

С тем кодом у кодера будет работать голова, а не поиск гугля.
__________________
Помогаю платно.
Помогаю иногда бесплатно.
Ответить с цитированием
Этот пользователь сказал Спасибо @Rafa3L за это полезное сообщение:
Bargest (10.09.2012)
  #4  
Старый 10.09.2012, 21:08
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
сколько я видел таких, когда написать sort() может, а понять как он выполняется - нет
Особенно "здорово", когда человек вроде и программы пишет всякие разные, и понты распускает, а потом попадается задача не из "ряда подобных задач" (а вернее одинаковых, которые решаются вызовом какой-то навесной библиотеки) - и все, человек двух строк связать не может и говорит, что написать чат без платной %super_lib_name_here% невозможно.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
@Rafa3L (10.09.2012)
  #5  
Старый 10.09.2012, 21:22
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Цитата:
Сообщение от Bargest
Особенно "здорово", когда человек вроде и программы пишет всякие разные, и понты распускает, а потом попадается задача не из "ряда подобных задач" (а вернее одинаковых, которые решаются вызовом какой-то навесной библиотеки) - и все, человек двух строк связать не может и говорит, что написать чат без платной %super_lib_name_here% невозможно.

Ну да. Это кодера ты очень точно описал. Ну то кодер. Настоящий программист найдет в гугле бесплатную %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  
Старый 10.09.2012, 22:37
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
если чего-то такого ВООБЩЕ нигде нет или для самообучения (развлечения читай)
Или если это тянет за собой 15 метров совершенно бесполезного кода (который может и ошибки содержать). Понятное дело, что 1000 раз писать одно и то же нет смысла. Однако надо иметь четкое представление о внутреннем устройстве, чтобы быть независимым и мочь написать всё, что нужно, самому. Также надо соизмерять цену (усилия) и результат: чат на том же WinSock делается ни чуть не сложнее даже по количеству строк кода, зато результат - знания WinSock (если человек пишет первый раз) и маленький размер файла, который можно без проблем скинуть другу. Хотя понятное дело, писать свой браузер для отображения одной страницы в проекте глупо и проще использовать TWebBrowser.
На многих МК подключение лишней библиотеки равно выходу за пределы доступной памяти и крашу всего проекта. Также я бы не стал в серьёзном проекте полагаться на труды Васи Пупкина из села Задрипинска, который выпустил мне бесплатную библиотеку.
Ну а самообучение никогда развлечением не считаю. Единственный толковый способ получения знаний.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
@Rafa3L (10.09.2012)
  #7  
Старый 11.09.2012, 09:30
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

имхо для 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  
Старый 11.09.2012, 22:01
Аватар для @Rafa3L
@Rafa3L @Rafa3L вне форума
Начинающий
 
Регистрация: 09.11.2011
Адрес: Москва
Сообщения: 144
Версия Delphi: XE2
Репутация: 11216
По умолчанию

Решил проверить твой метод и сравнить с моим:

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  
Старый 12.09.2012, 06:56
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

удивительно, но у меня тот код возвращает:
Код:
 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 
(d7+скачанные perlregexp, wordwrap – false)

что бы тот код написать на коленке и он сразу заработал надо или быть гением, или же писать каждый день кучи такого хардкода
Код:
  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  
Старый 12.09.2012, 07:33
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

To @Rafa3L если показывать такой код потенциальному работадателю шансы на трудоустройство резко падают, они такой код просто не смотрят, проверено
Ответить с цитированием
  #11  
Старый 12.09.2012, 20:06
Аватар для @Rafa3L
@Rafa3L @Rafa3L вне форума
Начинающий
 
Регистрация: 09.11.2011
Адрес: Москва
Сообщения: 144
Версия Delphi: XE2
Репутация: 11216
По умолчанию

Когда-то давно я писал на одном непрограммском форуме, и там часто споры заканчивался в стиле "сам ты дурак!".
А когда начал читать математически-программные форумы, то первое что понравилось это то что в споре прав тот кто докажет что прав на примере, в верном решении задачи.

Когда-то прогеры были честными энтузиастами, которым было безразлично к коммерции.
Сейчас же выше явный пример современного подхода в программировании. Это уже полу прогер полу коммерсант,
привыкший "парить" лоху-заказчику.
И тут я вижу, Pyro, вместо того чтобы доказать что его код лучший переходит на аргументы:
"И ты не знаешь выражений, ты лох!"
А то что с его выражениями программа работает в 85 раз медленнее уже его не интересует.

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

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

А слова "удивительно а у меня код работает" - это фирменная фишка?) Это вы всем заказчикам так парите?
__________________
Помогаю платно.
Помогаю иногда бесплатно.

Последний раз редактировалось @Rafa3L, 12.09.2012 в 20:13.
Ответить с цитированием
  #12  
Старый 12.09.2012, 21:47
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Нормально все с регулярками там работает. Ты наверное не ту библиотеку подключил или еще что. Может 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  
Старый 12.09.2012, 21:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Pyro
имхо всё очевидно:
если не знаете "X", нет желания изучать "X" (возможно и по объективным причинам) => не надо оправдывать это "производительностью", так и скажите: не знаю, нет желания.
(в "X" можете подставить: регулярные выражения, ООП, agile?, ...)

ни один человек знающий регулярки не будет писать ту жесть, если только он не под по дулом пистолета. наверно потому что дураки, и придумали регулярки тоже дураки
Вам немного осталось до санкций.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #14  
Старый 13.09.2012, 07:20
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

всего лишь хотел сказать что в достаточно серьёзном проекте, таком как автоматизация предприятия, твой хардкод не будет никому интересен, по упомянутым Pyro причинам + скорость разработки давольно большого объема кода резко падает, я переписывал жутко тормозящую неповоротливою прогу у которой на главной форме 15т. строчек кода, а форм там было около 30 разного калибра, предыдущие 2 хардкодера писали её 2 года сперва один, потом второму было лень переписывать он сидел подкручивал, переписал за 4 месяца стало намного лучше. Добавить, изменить, доработать что-то занимает намного меньше времени чем раньше.

Вопрос к @Rafa3L чем ООП лучше твоего подхода?

P.S. Без обид, может ты не тот язык выбрал, может стоило попробовать ассемблер?

Последний раз редактировалось Lost_Fish, 13.09.2012 в 08:29.
Ответить с цитированием
  #15  
Старый 13.09.2012, 08:51
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

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

"Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку." Мартин Фаулер

по поводу этих и других аргументов, всё уже написано во множестве хороших книг http://habrahabr.ru/post/135897/

нет энтузиазма читать книги, или если какие другие причины, то не надо обвинять американцев, или говорить, что программирование деградирует с каждым днём (потому что это не так)
именно энтузиасты читают книги/пишут статьи, учавствуют/создают open source проекты

я ещё в open-source не освоился, но начинал это зло примерно так: сначала услышал от одного php-иста, что он никогда бы на дельфи не стал писать бд+интерфейс к ней. прочитал книжку по php+ajax, что бы написать один рабочий скрипт, оттуда узнал про регулярки, скачал книгу про регулярки, для того, чтобы удобно практиковаться в регулярках – скачал perl, но синтаксис мне не понравился сразу, взялся за python, написал на нём скрипт для себя, потом из за отсутствия простейшей мелочи в синтаксисе, решил проверить, есть ли она в руби, в руби она была – взялся за руби, и только там узнал, что ооп – удобная штука (и ооп это только начало).
в общем не надо про коммерцию, или американцев, каждый делает так, как считает правильным, и в принципе невозможно, что бы программирование деградировало


Цитата:
Сообщение от Lost_Fish
P.S. Без обид, может ты не тот язык выбрал, может стоило попробовать ассемблер?
(я слышал, что даже в ассемблере умудряются ооп писать )
__________________
>woweook<
Ответить с цитированием
Этот пользователь сказал Спасибо Pyro за это полезное сообщение:
cdtj (18.09.2012)
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter