1. 1C / Говнокод #11930

    −97

    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
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    Функция Транслит(Имя)
        Рез = СокрЛП(Имя);
        Рез = СтрЗаменить(Рез,"а","a");
        Рез = СтрЗаменить(Рез,"б","b");
        Рез = СтрЗаменить(Рез,"в","v");
        Рез = СтрЗаменить(Рез,"г","g");
        Рез = СтрЗаменить(Рез,"д","d");
        Рез = СтрЗаменить(Рез,"е","e");
        Рез = СтрЗаменить(Рез,"ё","jo");
        Рез = СтрЗаменить(Рез,"ж","zh");
        Рез = СтрЗаменить(Рез,"з","z");
        Рез = СтрЗаменить(Рез,"и","i");
        Рез = СтрЗаменить(Рез,"й","jj");
        Рез = СтрЗаменить(Рез,"к","k");
        Рез = СтрЗаменить(Рез,"л","l");
        Рез = СтрЗаменить(Рез,"м","m");
        Рез = СтрЗаменить(Рез,"н","n");
        Рез = СтрЗаменить(Рез,"о","o");
        Рез = СтрЗаменить(Рез,"п","p");
        Рез = СтрЗаменить(Рез,"р","r");
        Рез = СтрЗаменить(Рез,"с","s");
        Рез = СтрЗаменить(Рез,"т","t");
        Рез = СтрЗаменить(Рез,"у","u");
        Рез = СтрЗаменить(Рез,"ф","f");
        Рез = СтрЗаменить(Рез,"х","h");
        Рез = СтрЗаменить(Рез,"ч","ch");
        Рез = СтрЗаменить(Рез,"ш","sh");
        Рез = СтрЗаменить(Рез,"щ","shh");
        Рез = СтрЗаменить(Рез,"ъ","");
        Рез = СтрЗаменить(Рез,"ь","");
        Рез = СтрЗаменить(Рез,"э","eh");
        Рез = СтрЗаменить(Рез,"ю","ju");
        Рез = СтрЗаменить(Рез,"ц","c");
        Рез = СтрЗаменить(Рез,"я","ja");
        Рез = СтрЗаменить(Рез,"ы","i");
        Рез = СтрЗаменить(Рез,"А","A");
        Рез = СтрЗаменить(Рез,"Б","B");
        Рез = СтрЗаменить(Рез,"В","V");
        Рез = СтрЗаменить(Рез,"Г","G");
        Рез = СтрЗаменить(Рез,"Д","D");
        Рез = СтрЗаменить(Рез,"Е","E");
        Рез = СтрЗаменить(Рез,"Ё","JO");
        Рез = СтрЗаменить(Рез,"Ж","ZH");
        Рез = СтрЗаменить(Рез,"З","Z");
        Рез = СтрЗаменить(Рез,"И","I");
        Рез = СтрЗаменить(Рез,"Й","JJ"); 
        Рез = СтрЗаменить(Рез,"К","K");
        Рез = СтрЗаменить(Рез,"Л","L");
        Рез = СтрЗаменить(Рез,"М","M");
        Рез = СтрЗаменить(Рез,"Н","N");
        Рез = СтрЗаменить(Рез,"О","O");
        Рез = СтрЗаменить(Рез,"П","P");
        Рез = СтрЗаменить(Рез,"Р","R");
        Рез = СтрЗаменить(Рез,"С","S");
        Рез = СтрЗаменить(Рез,"Т","T");
        Рез = СтрЗаменить(Рез,"У","U");
        Рез = СтрЗаменить(Рез,"Ф","F");
        Рез = СтрЗаменить(Рез,"Х","H");
        Рез = СтрЗаменить(Рез,"Ч","CH");
        Рез = СтрЗаменить(Рез,"Ш","SH");
        Рез = СтрЗаменить(Рез,"Щ","SHH");
        Рез = СтрЗаменить(Рез,"Ъ","");
        Рез = СтрЗаменить(Рез,"Ь","");
        Рез = СтрЗаменить(Рез,"Ы","");
        Рез = СтрЗаменить(Рез,"Ц","C");
        Рез = СтрЗаменить(Рез,"Э","EH");
        Рез = СтрЗаменить(Рез,"Ю","JU");
        Рез = СтрЗаменить(Рез,"Я","JA");
       
        Возврат(Рез);
    КонецФункции

    Суровая транслитерация... Я плакалъ

    Запостил: jerokee, 16 Октября 2012

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

    • С нетерпением ждем версию, адаптированную для китая и японии.

      bormand, забывший дома пароль
      Ответить
    • Рез = СтрЗаменить(Рез,"Э","EH");
      ех )))
      Ответить
      • Да тут половина букв (кроме очевидных к -> k, л -> l и т.д.) с потолка взята. Шх, жо, жу.
        Ответить
        • Я уже на это ("таблицу перекодировки") даже не смотрю - сам алгоритм шедеврален!
          Ответить
        • "й","jj"

          И "Ц","C" почему-то не на месте.

          Впрочем, для задачи (см. комментарий снизу) это, скорей всего, не особо важно, лишь бы примерно понятно было и имена уникальные. А имена, хех, могут быть и не уникальные: ЦХ == Ч.
          Ответить
          • уникальности скорее всего мало. возможно что кроме проги еще и люди должны различать названия файлов, для уникальности вполне хватило бы временной метки.
            Ответить
    • Я не пойму в чем смысл буржую, что "говно" напиши что "govno" он в любом случае не поймет.
      Ответить
      • Смысл был таков:
        1. Формируется имя файла на основании параметров "Наименование склада", "Наименование еще чего-то"
        2. Полученное имя НЕ должно содержать русских символов (иначе некая софтина, обрабатывающие эти файлы не сможет их прочесть).
        Поэтому "специалисту" было дано задание написать функцию транслитерации. Результат "на рукалицо"
        Ответить
        • Я то подумал, что это для людей переводить собрались.
          Ответить
    • Извините, хотел плюсануть, но опечатался.
      Ответить
    • Требую обратный перевод.
      Нечто подобное было на PHP, и не раз. Что доказывает, что все идиоты думают одинаково.
      > "Ъ",""
      > "Ь",""
      > "Ы",""
      А вот это - не труЪ.
      > "jo"
      А вот это забавно.
      Ответить
    • Немного не понял, чем недоволен автор? Мог бы ТС показать свой пример реализации этой задачи? Вот, например, вариант от спецов из Раруса:
      <code>
      //функция выполняет транслитерацию исходного текста на англ.язык
      //
      Функция ВыполнитьТранслитерацию(ИсходныйТекст) Экспорт

      ТекстВозврата = "";
      ДлинаИсходногоТекста = СтрДлина(ИсходныйТекст);
      Для Сч = 1 По ДлинаИсходногоТекста Цикл
      текСимвол = Сред(ИсходныйТекст, Сч, 1);
      возврСимвол = ОпределитьСимволВозврата(текСимвол);

      ТекстВозврата = ТекстВозврата + возврСимвол;
      КонецЦикла;

      Возврат ТекстВозврата;

      КонецФункции

      </code>
      Ответить
      • Отвечаю: приведенный Вами код, как раз более оптимален - обычно так и делается (мы не исключение). Проблема "оригинального" кода в том, что в этом случае используется ПОИСК СОВПАДЕНИЯ символа по ВСЕЙ строке много раз, т.е. при транслите символа "Я" функция будет пробегать 64(!) раза, вместо того, чтобы посимвольно один раз разобрать строку. Причем при "пробеге" будет еще модифицироваться исходная строка.
        Замеры скорости не производили, но это и так очевидно.
        Ответить
    • И продолжение:
      <code>
      Функция ОпределитьСимволВозврата(текСимвол)

      возврСимвол = "";

      //гласные
      Если текСимвол = "а" Тогда
      возврСимвол = "a";
      ИначеЕсли текСимвол = "е" Тогда
      возврСимвол = "e";
      ИначеЕсли текСимвол = "ё" Тогда
      возврСимвол = "yo";
      ИначеЕсли текСимвол = "и" Тогда
      возврСимвол = "i";
      ИначеЕсли текСимвол = "о" Тогда
      возврСимвол = "o";
      ИначеЕсли текСимвол = "у" Тогда
      возврСимвол = "u";
      ИначеЕсли текСимвол = "э" Тогда
      возврСимвол = "e";
      ИначеЕсли текСимвол = "ю" Тогда
      возврСимвол = "yu";
      ИначеЕсли текСимвол = "я" Тогда
      возврСимвол = "ya";
      ИначеЕсли текСимвол = "ы" Тогда
      возврСимвол = "y";
      //согласные
      ИначеЕсли текСимвол = "б" Тогда
      возврСимвол = "b";
      ИначеЕсли текСимвол = "в" Тогда
      возврСимвол = "v";
      ИначеЕсли текСимвол = "г" Тогда
      возврСимвол = "g";
      ИначеЕсли текСимвол = "д" Тогда
      возврСимвол = "d";
      ИначеЕсли текСимвол = "ж" Тогда
      возврСимвол = "zh";
      ИначеЕсли текСимвол = "з" Тогда
      возврСимвол = "z";
      ИначеЕсли текСимвол = "й" Тогда
      возврСимвол = "j";
      ИначеЕсли текСимвол = "к" Тогда
      возврСимвол = "k";
      ИначеЕсли текСимвол = "л" Тогда
      возврСимвол = "l";
      ИначеЕсли текСимвол = "м" Тогда
      возврСимвол = "m";
      ИначеЕсли текСимвол = "н" Тогда
      возврСимвол = "n";
      ИначеЕсли текСимвол = "п" Тогда
      возврСимвол = "p";
      ИначеЕсли текСимвол = "р" Тогда
      возврСимвол = "r";
      ИначеЕсли текСимвол = "с" Тогда
      возврСимвол = "s";
      ИначеЕсли текСимвол = "т" Тогда
      возврСимвол = "t";
      ИначеЕсли текСимвол = "ф" Тогда
      возврСимвол = "f";
      ИначеЕсли текСимвол = "х" Тогда
      возврСимвол = "kh";
      ИначеЕсли текСимвол = "ц" Тогда
      возврСимвол = "ts";
      ИначеЕсли текСимвол = "ч" Тогда
      возврСимвол = "ch";
      ИначеЕсли текСимвол = "ш" Тогда
      возврСимвол = "sh";
      ИначеЕсли текСимвол = "щ" Тогда
      возврСимвол = "sh";

      ИначеЕсли текСимвол = "ъ" Тогда
      возврСимвол = "";
      ИначеЕсли текСимвол = "ь" Тогда
      возврСимвол = "";


      КонецФункции

      </code>
      Ответить
      • Ну нормуль, только это все-таки нехорошо, данные прошивать в код. Текстуры ж никто попиксельно не рисует. Я б засунул таблицу перекодировки в, например, текстовый макет и подгружал при старте сеанса.
        Ответить
        • Тоже вариант... Только не забывай, что в 7-ке окромя табличного документа ничего подходящего нет.
          Ответить

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