Си диез / Говнокод #14338 Ссылка на оригинал

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
public static string AddControlDigits(string input)
{
      if (String.IsNullOrEmpty(input))
          return "";
      try
      {
          XDocument doc = XDocument.Parse(input.JavaSubString(input.IndexOf("<contracts>"), input.IndexOf("</contracts>") + "</contracts>".Length));
          String s = new String(doc.ToString().ToCharArray());
                
          XElement rootElement = doc.Root.Element("list_item");

          string basicNumber = rootElement.Element("basicNumber").Value;
          string endNumber = rootElement.Element("endNumber").Value;
          string loanCaseNumber = rootElement.Element("loanCaseNumber").Value;
          string loanCaseComplementNumber = rootElement.Element("loanCaseComplementNumber").Value;
          string bridgeLoanComplementNumber = rootElement.Element("bridgeLoanComplementNumber").Value;

          int checkNumber = CalcCheckDigitCU(basicNumber + endNumber);
          int loanCaseCheckNumber = calcCheckDigitUP(loanCaseNumber);
          int bridgeLoanCheckNumber = CalcCheckDigitCU(basicNumber + bridgeLoanComplementNumber);

          rootElement.Add(new XElement("checkNumber", checkNumber));
          rootElement.Add(new XElement("loanCaseCheckNumber", loanCaseCheckNumber));
          rootElement.Add(new XElement("bridgeLoanCheckNumber", bridgeLoanCheckNumber));

          input = input.Replace(s, doc.ToString());

          return "";
     }
     catch (Exception ex)
     {
         throw;
      }
 }

жопа

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

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

    • > Гениально
      Дальше - еще гениальней. Замена ноды в XML через... String.replace. Автору надо идти работать практологом, бесценный опыт уже есть...
      Ответить
      • там такая фишка что на входе XML с несколькими root нодами, поэтому его не загонишь в XDocument. То есть это - строка которая похожа на XML, такой его внебрачный сын.
        Ответить
        • > XML с несколькими root нодами
          Ёбаный пиздец, простите, не удержался.

          Ну вот зачем, зачем люди нарушают стандарты... XML и так не сахар, так они еще проблем себе и другим добавляют... Вот неужели им было так сложно заключить эти несколько root нод в истинную root ноду, и юзать самый обычный парсер...?
          Ответить
          • я вообще никогда ни в одном языке не видел изящный способ работы с XML. Eсли видишь в коде срач, скорее всего речь идет о XML.
            Ответить
            • > изящный способ работы с XML
              У вас была проблема, и для ее решения вы выбрали XML. Теперь у вас две проблемы.

              Ну по крайней мере, если юзаются стандартные генераторы и парсеры, то хотя бы нет секса с кодировками, экранировками, множественными рутами и прочей херней, возникающей от большого ума...
              Ответить
              • мне больше нравится
                I had a problem so I thought to use Java. Now I have a ProblemFactory.
                Ответить
                • А мне вот это:
                  So, you have a problem. You say "I know, I'll use floating point!" Now you have 2.0001341678 problems.
                  Ответить
            • > вообще никогда ни в одном языке не видел изящный способ работы с XML

              Неужто Linq2Xml неизящен? По сравнению с DOM и прочей лабудой...

              Не менее изящно - использование xml-сериализации/десериализации. Перегоняем данные xml в объекты предметной области - хорошо!

              -----
              В Scala есть XML pattern matching. Погугли, глянь пример. В какой-то мере изящно. Но с непривычки может торкнуть.
              Возможно, немерлисты реализуют подобное...
              Ответить
        • Кстати, а откуда гарантия, что после парсинга строки в XML (7) и перегонки обратно в строку (8) получится то же самое, что было изначально? Из-за этого оно же спокойно может завалиться, если эту псевдо-xml'ку сгенерит другая прога, которая, например, пробелы в других местах ставит, или отступы лишние добавляет, или атрибуты в другом порядке сохраняет...
          Ответить
          • Вы сейчас стоите над дохлой коровой и спорите какое у нее могло бы быть молоко.
            Ответить
        • Вообще в случае с множественными корневыми элементами надо бы использовать XmlReader. Ну так экономнее будет, но не удобнее...
          Ответить
          • Вообще, в случае с множественными корневыми элементами, надо бы взять и уебать автора этой идеи стулом по голове. Так будет эконономнее и удобнее для всех его коллег...

            Я вот пока вижу такую более-менее вескую причину, где это могло бы понадобиться - большой файл, в который довольно часто приписывают все новые и новые xml'ки. В случае ОП'а причина явно не такая 😉
            Ответить
            • Там просто не нужен корневой элемент, вообще ХМЛ может быть не валидный, там уже от предприимчивости и находчивости писателей будет зависеть.

              Иногде просто до автора не добраться, вот, например, автор того, что я сейчас поддерживаю ушел работать в силовые структуры, и сидит в сейфе за семью печатями, за колючей проволкой, взводом ментов с овчарками и все такое - до него никак не дотянуться...
              Ответить
              • > вообще ХМЛ может быть не валидный
                Одно время мучился, писал редактор для файла с переводами, который должен был быть именно в таком недоиксэмэль, и кодировке 1251 (привет, европа). Кому-то лень было юзать стандартный генератор\парсер, и он сваял свое говно, в котором ни декларации вверху, ни entity вместо &, < и ", и что-то там еще было несовместимое, уже не помню...

                Короче через обычный парсер это было бесполезно гонять, и пришлось писать свой говнопарсер, совместимый с тем...

                > ушел работать в силовые структуры
                Он знал, что за ним придут 😉
                Ответить
      • > идти работать практологом
        Это от слова "практика"?
        Ответить
  • Гм.. А почему XDocument а не XmlDocument? Какой-нибудь вин-фон?
    Я так понимаю, здесь на XAML издеваются... Вивисекцией пахнет )
    Ответить
    • Никак нет, это LINQ for XML. Гадость редкостная но куда лучше чем дедушкин XmlDocument и иже с ним
      Ответить
      • то, что я тут вижу - те же яйца, только в профиль.
        Ответить
  • catch (Exception ex)
    {
    throw;
    }

    вот это действительно гениально! Человек снипеты умеет юзать -честь ему и хвала.

    нахрена он возвращает пустую строку?
    Ответить
  • input.JavaSubString

    в моем шарпике? ЛОЛКИ

    Метод вообще ничего не меняет и не выводит. Он состояние даже не трогает) ну разве что через CalcCheckDigitCU

    loanCaseComplementNumber не используется даже в пределах метода.
    Ответить
    • > Метод вообще ничего не меняет и не выводит.
      Он может упасть, а может не упасть. Так что 1 бит инфы он все-таки возвращает.
      Ответить
      • Может это такой хитрый способ отрандомить? а там в что то типа

        var maybe = false;
         try
         {
         AddControlDigits(someString);
         }
        catch (Exception)
        {
        maybe = true;
         }
        Ответить
      • если метод будет void, то он может эксепшен рэйзить, если что-то не так будет, который можно адекватно отлавливать, а не как тут 🙂
        Ответить
  • Фейк.
    JavaSubString - неведомая фигня.
    input = input.Replace - строки неизменяемые, поэтому этот метод ничего не производит.
    Ответить
    • > JavaSubString - неведомая фигня.
      Т.е. экстеншн методы в шарпе уже запретили?

      > строки неизменяемые
      Да там поди при копировании на ГК накосячили: не return "", а return input.
      Ответить
    • так:
      string one = "one";
      one = one.Replace("on", "an");
      Console.WriteLine(one);

      будет ane
      а так:
      string one = "one";
      one = one.Replace("on", "an");
      Console.WriteLine(one);

      будет: one
      Вы это имели ввиду?
      Ответить
      • поправка: во втором случае
        string one = "one";
        one.Replace("on", "an");
        Console.WriteLine(one);
        Ответить
    • >>input = input.Replace - строки неизменяемые, поэтому этот метод ничего не производит.

      OMG

      1 создается новая строка с помощью метода Replace
      2 ссылка на новую строку присваивается input

      Не?
      Ответить
      • guest имеет в виду, что сами строки иммутабельны. А input = input.Replace просто заменил в переменной input ссылку на изначальную строку, на ссылку на результирующую строку. Сама же строка, на которую ссылался input изначально, никак не изменилась, и ее скушает сборщик мусора, если она никому не нужна.

        При этом т.к. аргумент в функцию прилетел не по ссылке (не out и не ref), то и вызывающая функция ничего не заметит.
        Ответить
        • А, он про то, что мол результат через строку возвращается? тогда было бы ref написано
          Ответить

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

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

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


    8