?

Log in

No account? Create an account
обычная картина по утрам в моей комнате=

Михаил Г-ский

Моя жизнь, мои достижения | Записки другого мизантропа

Previous Entry Share Flag Next Entry
Как правильно разбить предложение на слова в языке программирования высокого уровня
Хуйбик Рубика
mixoil
Для доли юмора — на примере языка 1С 7.7, который к этому приспособлен меньше всего (скажем, в этом, кхм... «языке» даже нет вложенных массивов; да что там... в нём даже нет трёхмерных массивов).

Итак, «Функция словоИзПредложения(предложение, словоНомер)».

Решение начинающего программиста:

Ответ = "";
//
Дл = СтрДлина(предложение);
Слово = "";
НомерСлова = 1;
Для К = 1 По Дл Цикл
    Если (Сред(предложение, К, 1) = " ") или (К = СтрДлина(предложение)) Тогда
        Если (К = СтрДлина(предложение)) Тогда
            Слово = Слово + Сред(предложение, К, 1);
        КонецЕсли;
        Если НомерСлова = словоНомер Тогда
            Ответ = Слово;
            Прервать;
        КонецЕсли;
        НомерСлова = НомерСлова + 1;
        Слово = "";
        Продолжить;
    КонецЕсли;
    Слово = Слово + Сред(Стр, К, 1);
КонецЦикла;
//
Возврат Ответ;

(Возможно, код нерабочий, это демонстрация принципа.)

Программист поопытнее будет разделять слова не перебором всех букв, а поиском пробелов (Найти(предложение, " ") и так далее).

Интересный факт, что так (искать пробелы, а не проходить по строке) может поступить и опытный умный программист в приступе острого отупения — овертаймы, одержимость (одна из характерных черт разработчиков) и недосыпание don't do our minds any good :-(

Лично я сам (как и любой много пишущий коллега, полагаю) за свою жизнь написал в сомнамбулическом состоянии о-о-о-очень много хуёвого кода :-)
(Не горжусь, конечно же. Просто это факт нашей профессии, от которого никуда не денешься и нечего тут стыдиться.)

Тем временем, правильное (и неочевидное для 1С-ников, среди которых особенно много не очень хороших программистов — даже больше, чем среди «программистов PHP») решение:

предложение = """" + СтрЗаменить(предложение, " ", """,""") + """";
// было: «Получите второе слово из этого предложения»
// стало: «""Получите","второе","слово","из","этого","предложения"»
слова = СоздатьОбъект("СписокЗначений");
слова.ИзСтрокиСРазделителями(предложение);
Возврат слова.ПолучитьЗначение(словоНомер); // Да-да, в 1С первый индекс массива — единица

В php для этого есть explode(), в javascript — split().
Кстати, как оказывается, это решение не сразу приходит в голову и людям с опытом (переработки и одержимость...), так что пусть это будет напоминанием и подсказкой.

Код 1С я использовал как самое плохо приспособленное для программирования недоразумение :-)

К написанию натолкнуло то, что мне дали в доработку коммерческий (в смысле, за него берут деньги, и выше среднего) движок сайта, в котором я (о, боги) обнаружил проход по буквам (первый упомянутый мной вариант, «для самых маленьких»).
(facepalm.jpg)