1. VisualBasic / Говнокод #219

    −519.3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    '/**
    ' * Parser
    ' * @param String text
    ' * @param Scripting.Dictionary text
    ' */
    private function Parse(text, data)
        dim RE, EM, MO, res, lastIndex, val
        res = ""
        Set RE = New RegExp
        RE.Pattern = "(\\?)\$(?:(\w+)|\{(\w+)\})"
        RE.IgnoreCase = False
        RE.Global = True
        Set EM = RE.Execute(text)
        if EM.Count > 0 then
            lastIndex = 1
            for each MO in EM
                if Mid(MO.Value,1,2) = "\$" then
                    val = Mid(MO.Value,2)
                else
                    if Mid(MO.Value,1,2) = "${" then 
                        val = Mid(Mid(MO.Value,1,Len(MO.Value)-1),3) 
                    else 
                        val = Mid(MO.Value,2)
                    end if
                    val = data(val)
                end if
                res = res & Mid(text, lastIndex, MO.FirstIndex-lastIndex+1) & val
                lastIndex = MO.FirstIndex+MO.Length+1
            next
            res = res & Mid(text, lastIndex)
            Parse = res
        else
            Parse = text
        end if
    end function

    Пример, как функция, которая в других языках описывается одной строкой, реализуется на этом говноязыке

    Запостил: guest, 18 Декабря 2008

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

    • показать все, что скрытоdj Virus:
      Вот так это выглядит на ПХП:
      function str_parse($value, $text) {
          return preg_replace('/(?<!\\\\)\$(?:\{([\w_]+)\}|([\w_]+))/e', '$value["$1$2"]', $text);
      }
      Ответить
    • показать все, что скрытоdj Virus:
      вот так на перле:
      sub display_output {
         my($template, $r_namespace) = @_;
         $template =~ s/\$([A-Za-z0-9_]+)/$r_namespace->{$1}/g;
         return $template;
      }
      Ответить
    • показать все, что скрытоCF:
      При всём неуважении к VB, Вы-таки не справедливы. Встроенной поддержки регулярных выражений нет почти ни в каких язаках, а библиотеки для работы с ними, может и для VB есть.
      Ответить
    • показать все, что скрытоxtk:
      угу, стопудово, надо линковаться с либами регекспа
      Ответить
    • показать все, что скрытоdj Virus:
      дык, в этой функции юзаются регэкспы!
      Мало того, этот говнокод я же и писал.
      Я достаточно много писал на этом языке и для меня это было мучение, так как я люблю писать лаконичный и читабельный код, а тут, тужился, крутил, вертел, ну никак не выходило. В итоге плюнул и писал как получалось.
      Ответить
    • показать все, что скрытоАвтор, вы невежда. Парсить на VB очень просто. Еще проще на VB.net, но медленней.
      Ответить
      • показать все, что скрытоПлюсадин.
        А
        private function Parse(text, data)
        пишется
        private function Parse(text$, data$) as string

        Аффтар, посамоутверждайся за счёт QBasic-а, он по сравнению с, например, Delphi, точно говно.

        This sucks.
        Ответить
    • Мальчег, а ты после достаточно-много-писания, не в курсе, что Let, Set, неинициализованные, и уж тем-более неттипизированные переменные не используются уже с версии 2001 года и оставлены только для совместимости?
      Ответить
    • показать все, что скрытоVb не нужен
      Ответить

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