Яuбy / Говнокод #18505 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
begin
      # Это пиздец
      artist_title = row.title.split(/ - /)
      if artist_title.length > 1
        row.artist = artist_title[0]
        row.title  = artist_title[1]
      else
        artist_title = row.title.split(/ — /)
        if artist_title.length > 1
          row.artist = artist_title[0]
          row.title  = artist_title[1]
        else
          artist_title = row.title.split(/ - /)
          if artist_title.length > 1
            row.artist = artist_title[0]
            row.title  = artist_title[1]
          else
            artist_title = row.title.split(/ – /)
            if artist_title.length > 1
              row.artist = artist_title[0]
              row.title  = artist_title[1]
            else
              artist = row.title.match(/\((.*?)\)/)
              artist = artist.captures[0]
              # puts artist_title
              # puts row.title
              # puts artist
              row.artist = artist
              row.title  = row.title.gsub('('+artist+')', '').strip
            end
          end
        end
      end
    rescue
      next
    end

Запостил: gerasim13 gerasim13, (Updated )

Комментарии (44) RSS

    • Я не знаток Ruby, но мне кажется, что цикл данный код не спасёт.

      Что поступает на вход в 8-й строке и чем оно отличается от 3-й строки?
      Ответить
      • Явно код повторяется
        artist_title = row.title.split(/ - /)
                  if artist_title.length > 1
                    row.artist = artist_title[0]
                    row.title  = artist_title[1]
                  else
                    artist_title = row.title.split(/ – /)
                    if artist_title.length > 1
                      row.artist = artist_title[0]
                      row.title  = artist_title[1]
        Ответить
        • Спасибо, капитан. А теперь внимание, вопрос. Зачем повторять действие row.title.split(/ – /) ? Метод split имеет побочный эффект или значение row.title между вызовами может ВНЕЗАПНО измениться кем-то ещё?
          Ответить
            • Всё оказалось круче, чем я предполагал. Там всё-таки РАЗНЫЕ действия. См. подсказку Dummy00001.
              Ответить
                • Уговорил, цикл нужен. Хоть явный (foreach), хоть неявный (регулярка).

                  Причём не факт, что именно по списку символов. Тут, как оказалось, не только тире, но и пробелы могут быть разными. Как бы не пришлось тут городить что-то сложное...
                  Ответить
                      • Запамятовал я, отрок. Кагорцу перебрал, на венчание двух мужеложников.
                        Ответить
                        • Первое послание к коринфянам, глава 5:
                          9 Я писал вам в послании — не сообщаться с блудниками;
                          10 впрочем не вообще с блудниками мира сего, или лихоимцами, или хищниками, или идолослужителями, ибо иначе надлежало бы вам выйти из мира  сего.
                          11 Но я писал вам не сообщаться с тем, кто, называясь братом, остается блудником, или лихоимцем, или идолослужителем, или злоречивым, или пьяницею, или хищником; с таким даже и не есть вместе.


                          Боюсь, что на 3_14дара этот запрет не распространяется, ибо считает он, что никогда мы не будем братьями.
                          Ответить
          • Ну там в одном случае дефис - в другом тире

            Да, я немного опоздал)
            Ответить
        • > -28
          Блин, ну лучше бы скрытым постам въебали по 28 плюсов, чем тратить ботов на разжигание сёминой жопы...
          Ответить
  • напомнило. народ тут доку пилил для Линуха в ВинВорде.

    при тесте доки, долго возмущалисть что "bash ––version" не работает почему то.
    Ответить
    • Слона-то я и не заметил... И ещё вступил в идиотскую полемику...

      Но в любом случае цикл не нужен, раз уж мы используем регулярки. Все варианты тире можно проверить одним выражением.
      Ответить
      • > Слона-то я и не заметил...

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

        Большинство из символов выглядят почти одинаково, но есть один из них - тире, строка #18 сверху - который длинее все остальных, и он "касается" краев баундинг бокса символа. Его легко распознать если этот символ выделить: становится видно что он касается краев.
        Ответить
        • Тот, что в строке 8, тоже вроде бы касается краёв, хотя всё-же немного другой символ. Ради интереса написал чекер:
          $('span.regexp').each(function(_, e) {
              var i, s = $(e).text(), out = "";
              for (i = 0; i < s.length; ++i) {
                  out += " " + s.charCodeAt(i);
              }
              console.log(out);
          });

          Выхлоп для строк с тире следующий:
          47 160 45 32 47
          47 32 8212 32 47
          47 32 45 32 47
          47 32 8211 32 47
          Первый регекс отличается от третьего использованием  , у второго и четвёртого кодпоинты отличаются на единицу.
          Ответить
          • Лол, хотел отредактировать свой комментарий, а ГК при открытии окна редактирования заменил энтити   на реальный пробел.
            Ответить
        • Раньше был гимор с кодировками, теперь - гимор с юникодом?
          Ответить
          • С пробелами геморрой был ещё до Юникода (NBSP появился в восьмибитных кодировках). Юникод просто увеличил количество представлений для некоторых символов.

            Юникод непоследователен. Его создатели так и не определились, что соответствует коду: семантическое значение символа или его графический вид. Так появилось несколько символов, которые графически идентичны, но имеют разную семантику, и несколько символов, у которых назначение одинаковое, но несколько графических форм.

            Но данный ГК даже не об этом. С создателем списка произведений, как я понял, нет обратной связи, поэтому договориться о формате, который бы однозначно парсился, невозможно. Приходится глотать кашу из разных разделителей.
            Ответить
          • гемор с юникодом кратковременный. после пары залётов, и опыт появляется проблему замечать, и регулярки/этц уже есть в заготовках.

            гемор с кодировками - это долгосрочно, постоянно и без остановки.
            Ответить
        • неужели там так много вариаций?
          в любом случае, это можно было в цикле сделать, по всем вариациям сделать, а не 100500 if else писать.
          да даже если и так, если там встретится еще один дефис, то можно неплохо так говном наестся
          Ответить
          • Самое интересное, что название фильма/спектакля/книги/чего-то ещё может содержать дефисы и тире (и даже несколько штук), и фамилии бывают двойными, так что парсинг афиш — дело неблагодарное.
            Ответить
            • там скорее музыка парсилась. энивэй, яндекс же музыку парсит.
              Ответить
              • Ещё лучше.
                Андерс Т. — Болен Д. — Ты — моё сердце, ты — моя душа.
                Ответить
                • я думаю, у них там есть специально обученные люди, которые валидируют это
                  Ответить
                    • видимо имелось в виду, что парсит специально обученный абезьйан, а не программа
                      Ответить
                    • это значит то, что перед тем, как конечный пользователь увидит результат, оператор/контент менеджер проверит то, как распарсилось название композиции, и в случае необходимости они подкорректируют ее руками.
                      хотя, может я фантазирую, и в яндекс-музыку все заносится руками, но если бы была вероятность профакапиться в том, как алгоритм ее распарсит, я бы посадил людей, которые будут либо аппрувить это, либо руками вносить правки
                      Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8